次の方法で共有


ALTER SCHEMA (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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

スキーマに移動するスキーマ スコープのセキュリティ保護可能なセキュリティ保護可能なリソースの 1 部または 2 部構成の名前。

解説

ユーザーとスキーマは完全に分離されています。 スキーマは、データベース ユーザーと同等ではありません。 システム カタログ ビューを使用して、データベース ユーザーとスキーマの違いを特定します。

ALTER SCHEMA は、セキュリティ保護可能なリソースを同じデータベース内のスキーマ間で移動する場合にのみ使用できます。 スキーマ内のセキュリティ保護可能なリソースを変更または削除するには、そのリソースに固有の ALTER または DROP ステートメントを使用します。

securable_name に 1 つの要素から構成される名前を使用した場合、セキュリティ保護可能なリソースを特定するために、現在有効な名前解決規則が使用されます。

セキュリティ保護可能なリソースに関連付けられているすべてのアクセス許可は、セキュリティ保護可能なリソースが新しいスキーマに移動されると削除されます。 セキュリティ保護可能なリソースの所有者が明示的に設定されている場合、所有者は変更されません。 セキュリティ保護可能なリソースの所有者が SCHEMA OWNER に設定されている場合、所有者は SCHEMA OWNER のままですが、移動後、SCHEMA OWNER は新しいスキーマの所有者に解決されます。 新しい所有者の principal_idNULLされます。

Von Bedeutung

ALTER SCHEMAを使用してストアド プロシージャ、関数、ビュー、またはトリガーを別のスキーマに転送する場合、sys.sqldefinition カタログ ビューの列内のオブジェクトのスキーマ名、または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 権限も必要です。

移動するセキュリティ保護可能なリソースに関連付けられているすべての権限は、移動時に削除されます。

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