適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
在結構描述之間傳送安全性實體。
語法
-- 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>
正在變更擁有者之實體的類別。 物件是預設值。
securable_name
架構範圍安全性實體的一部分或兩部分名稱,要移至架構中。
備註
使用者和結構描述完全分隔。 架構不等於資料庫使用者。 使用 系統目錄檢視 來識別資料庫用戶與架構之間的任何差異。
ALTER SCHEMA 只能用來移動相同資料庫中結構描述之間的安全性實體。 若要變更或卸除結構描述內的安全性實體,請使用該安全性實體特定的 ALTER 或 DROP 陳述式。
如果 securable_name 使用一部分名稱,則會使用目前使用的名稱解析規則來尋找該安全性實體。
當安全性實體移至新的架構時,會卸除與安全性實體相關聯的所有許可權。 如果已明確設定安全性實體的擁有者,則擁有者會保持不變。 如果安全性實體的擁有者已設為 SCHEMA OWNER,該擁有者將維持為 SCHEMA OWNER;不過,在移動之後,SCHEMA OWNER 將解析為新結構描述的擁有者。
principal_id新擁有者的 將是 NULL。
這很重要
如果您使用 ALTER SCHEMA 將預存程式、函式、檢視或觸發程式傳送至另一個架構,則不會變更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,則該使用者也必須對目標結構描述的擁有者具有 IMPERSONATION 權限。
移動要傳送的安全性實體時,將會卸除與該安全性實體相關聯的所有權限。
範例
A。 轉移資料表的擁有權
下列範例會將結構描述 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