适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统 (PDW)
Microsoft Fabric 中的 SQL 分析端点
Microsoft Fabric 中的仓库
在架构之间传输安全对象。
语法
-- Syntax for SQL Server and Azure SQL Database
ALTER SCHEMA schema_name
TRANSFER [ <entity_type> :: ] securable_name
[;]
<entity_type> ::=
{
Object | Type | XML Schema Collection
}
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
ALTER SCHEMA schema_name
TRANSFER [ OBJECT :: ] securable_name
[;]
参数
schema_name
当前数据库中的目标架构。 安全对象将移动到此架构中。 不能或 SYS
INFORMATION_SCHEMA
。
<entity_type>
要为其更改所有者的实体的类。 Object 是默认值。
securable_name
要移动到架构范围内的安全对象的一部分或两部分名称。
备注
用户与架构完全分离。 架构不等同于数据库用户。 使用 系统目录视图 标识数据库用户和架构之间的任何差异。
ALTER SCHEMA 仅可用于在同一数据库中的架构之间移动安全对象。 若要更改或删除架构中的安全对象,请使用特定于该安全对象的 ALTER 或 DROP 语句。
如果对 securable_name 使用了由一部分组成的名称,则将使用当前生效的名称解析规则查找该安全对象。
当安全对象移动到新架构时,将删除与安全对象关联的所有权限。 如果显式设置了安全对象的所有者,则所有者保持不变。 如果安全对象的所有者已设置为 SCHEMA OWNER,则该所有者将保持为 SCHEMA OWNER;但移动之后,SCHEMA OWNER 将解析为新架构的所有者。
principal_id
新所有者将是 NULL
。
重要
如果用于ALTER SCHEMA
将存储过程、函数、视图或触发器传输到另一个架构,则它不会更改 sys.sql_modules 目录视图列中对象的definition
架构名称(如果存在)或OBJECT_DEFINITION内置函数的结果。 因此, ALTER SCHEMA
不应用于移动这些对象类型。 而是删除对象,然后在新架构中重新创建该对象。
移动表或同义词不会自动更新对该对象的引用。 必须手动修改引用已移动对象的任何对象。 例如,如果移动了某个表,并且触发器中引用了该表,则必须修改触发器以反映新的架构名称。 请使用 sys.sql_expression_dependencies 列出该对象上的依赖关系,然后再进行移动。
若要使用 SQL Server Management Studio 更改表的架构,请在对象资源管理器中右键单击该表,然后选择“ 设计”。 按 F4 以打开“属性”窗口。 在“架构”框中,选择新架构。
ALTER SCHEMA 使用架构级别锁。
谨慎
在 Fabric SQL 分析终结点中,不支持通过 T-SQL 在架构之间传输表。 它可能会对 OneLake 和 SQL 分析终结点之间的同步作产生负面影响。
权限
若要从另一个架构中传输安全对象,当前用户必须拥有对该安全对象(非架构)的 CONTROL 权限,并拥有对目标架构的 ALTER 权限。
如果已为安全对象指定 EXECUTE AS OWNER,且所有者已设置为 SCHEMA OWNER,则用户还必须拥有对目标架构所有者的 IMPERSONATE 权限。
在移动安全对象后,将删除与所传输的安全对象相关联的所有权限。
示例
答: 转移表的所有权
以下示例通过将表 HumanResources
从架构 Address
传输到 Person
架构来修改架构 HumanResources
。
USE AdventureWorks2022;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO
B. 转让类型的所有权
以下示例在 Production
架构中创建一个类型,然后将该类型传递到 Person
架构。
USE AdventureWorks2022;
GO
CREATE TYPE Production.TestType FROM [VARCHAR](10) NOT NULL ;
GO
-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
FROM sys.types JOIN sys.schemas
ON sys.types.schema_id = sys.schemas.schema_id
WHERE sys.types.name = 'TestType' ;
GO
-- Change the type to the Person schema.
ALTER SCHEMA Person TRANSFER type::Production.TestType ;
GO
-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
FROM sys.types JOIN sys.schemas
ON sys.types.schema_id = sys.schemas.schema_id
WHERE sys.types.name = 'TestType' ;
GO
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
C. 转移表的所有权
下面的示例在 Region
架构中创建一个表 dbo
,创建一个 Sales
架构,然后将 Region
表从 dbo
架构移动到 Sales
架构。
CREATE TABLE dbo.Region
(Region_id INT NOT NULL,
Region_Name CHAR(5) NOT NULL)
WITH (DISTRIBUTION = REPLICATE);
GO
CREATE SCHEMA Sales;
GO
ALTER SCHEMA Sales TRANSFER OBJECT::dbo.Region;
GO