ALTER SCHEMA (Transact-SQL)

スキーマ間でセキュリティ保護可能なリソースを移動します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

ALTER SCHEMA schema_name 
   TRANSFER [ <entity_type> :: ] securable_name [;]

<entity_type> ::=
    {
        Object | Type | XML Schema Collection
    }

引数

  • 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_id は NULL になります。

SQL Server Management Studio を使用してテーブルまたはビューのスキーマを変更するには、オブジェクト エクスプローラーでテーブルまたはビューを右クリックし、[デザイン] をクリックします。F4 キーを押して [プロパティ] ウィンドウを開きます。[スキーマ] ボックスで新しいスキーマを選択します。

注記注意

SQL Server 2005 からスキーマの動作が変更されました。その結果、スキーマがデータベース ユーザーと同じであると想定しているコードでは、正しい結果が返されない場合があります。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 のいずれかの DDL ステートメントが使用されたことのあるデータベースでは、sysobjects などの古いカタログ ビューを使用しないでください。そのようなデータベースでは、代わりに新しいカタログ ビューを使用してください。新しいカタログ ビューでは、SQL Server 2005 で導入されたプリンシパルとスキーマの分離が考慮されます。カタログ ビューの詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。

権限

他のスキーマからセキュリティ保護可能なリソースを移動する場合、現在のユーザーには、(スキーマではなく) セキュリティ保護可能なリソースに対する CONTROL 権限と対象スキーマに対する ALTER 権限が必要です。

セキュリティ保護可能なリソースに EXECUTE AS OWNER の指定があり、所有者が SCHEMA OWNER に設定されている場合は、対象スキーマの所有者に対する IMPERSONATION 権限も必要です。

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

A. テーブルの所有権を譲渡する

次の例では、テーブル Address をスキーマ Person からスキーマ HumanResources に移動し、スキーマを変更します。

USE AdventureWorks2008R2;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

B. 型の所有権を譲渡する

次の例では、Production スキーマに型を作成し、その型を Person スキーマに譲渡します。

USE AdventureWorks2008R2;
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