分享方式:


ALTER SCHEMA (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

在結構描述之間傳送安全性實體。

Transact-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。

移動預存程序、函數、檢視或觸發程序,不會變更 sys.sql_modules 目錄檢視或使用 OBJECT_DEFINITION 內建函數取得之定義資料行中對應物件的結構描述名稱 (若有的話)。 因此,我們建議您不要利用 ALTER SCHEMA 來移動這些物件類型。 相反地,請卸除物件,再利用它的新結構描述來重新建立物件。

移動資料表或同義字之類的物件,不會自動更新指向這個物件的參考。 您必須手動修改任何參考已傳輸之物件的物件。 例如,如果您移動了資料表,而且觸發程序參考該資料表,您就必須修改觸發程序來反映新的結構描述名稱。 在移動物件之前,請利用 sys.sql_expression_dependencies 來列出其相依性。

若要使用 SQL Server Management Studio 來變更資料表的結構描述,請在 [物件總管] 中,以滑鼠右鍵按一下資料表,然後按一下 [設計]。 按下 F4 開啟 [屬性] 視窗。 在 [結構描述] 方塊中,選取新的結構描述。

ALTER SCHEMA 會使用結構描述層級鎖定。

警告

從 SQL Server 2005 開始,結構描述的行為已經變更。 結果是,假設結構描述相當於資料庫使用者的程式碼可能不會傳回正確的結果。 不應該在曾經使用下列任何一個 DDL 陳述式的資料庫中使用舊的目錄檢視 (包括 sysobjects):CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION。 在此類資料庫中,必須改用新的目錄檢視。 新的目錄檢視會考量 SQL Server 2005 中所導入的主體和結構描述的分隔。 如需目錄檢視的詳細資訊,請參閱目錄檢視 (Transact-SQL)

權限

若要從另一個結構描述傳送安全性實體,目前使用者必須對安全性實體 (而非結構描述) 具有 CONTROL 權限,並對目標結構描述具有 ALTER 權限。

如果安全性實體上有 EXECUTE AS OWNER 規格,且擁有者設為 SCHEMA OWNER,則該使用者也必須對目標結構描述的擁有者具有 IMPERSONATION 權限。

移動要傳送的安全性實體時,將會卸除與該安全性實體相關聯的所有權限。

範例

A. 傳送資料表的擁有權

下列範例會將結構描述 Person 中的資料表 Address 傳送到結構描述 HumanResources 中,以修改這個結構描述 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. 傳送資料表的擁有權

下列範例會在 dbo 結構描述中建立資料表 Region、建立 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  

另請參閱

CREATE SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
EVENTDATA (Transact-SQL)