sp_addextendedproperty (Transact-SQL)
新しい拡張プロパティをデータベース オブジェクトに追加します。
構文
sp_addextendedproperty
[ @name = ] { 'property_name' }
[ , [ @value = ] { 'value' }
[ , [ @level0type = ] { 'level0_object_type' }
, [ @level0name = ] { 'level0_object_name' }
[ , [ @level1type = ] { 'level1_object_type' }
, [ @level1name = ] { 'level1_object_name' }
[ , [ @level2type = ] { 'level2_object_type' }
, [ @level2name = ] { 'level2_object_name' }
]
]
]
]
[;]
引数
[ @name ] = { 'property_name' }
追加するプロパティの名前です。 property_name のデータ型は sysname で、NULL 値は許可されません。 名前には、空白や英数字以外の文字列、およびバイナリ値も含めることができます。[ @value= ] { 'value'}
プロパティに関連付ける値です。 value のデータ型は sql_variant で、既定値は NULL です。 value のサイズは、7,500 バイト以下にする必要があります。[ @level0type= ] { 'level0_object_type' }
レベル 0 のオブジェクトの種類です。 level0_object_type のデータ型は varchar(128) で、既定値は NULL です。有効な値は、ASSEMBLY、CONTRACT、EVENT NOTIFICATION、FILEGROUP、MESSAGE TYPE、PARTITION FUNCTION、PARTITION SCHEME、REMOTE SERVICE BINDING、ROUTE、SCHEMA、SERVICE、USER、TRIGGER、TYPE、PLAN GUIDE、および NULL です。
重要 レベル 1 の種類のオブジェクトの拡張プロパティで、USER をレベル 0 の種類として指定できる機能は、SQL Server の将来のバージョンで削除されます。 代わりに、レベル 0 の種類として SCHEMA を使用してください。 たとえば、テーブルで拡張プロパティを定義するときに、ユーザー名の代わりにテーブルのスキーマを指定します。 レベル 0 の種類として TYPE を指定できる機能は、SQL Server の将来のバージョンで削除されます。 TYPE については、レベル 0 の種類として SCHEMA、レベル 1 の種類として TYPE を使用してください。
[ @level0name= ] { 'level0_object_name' }
指定したレベル 0 のオブジェクトの種類の名前です。 level0_object_name のデータ型は sysname で、既定値は NULL です。[ @level1type= ] { 'level1_object_type' }
レベル 1 のオブジェクトの種類です。 level1_object_type のデータ型は varchar(128) で、既定値は NULL です。 有効な値は、AGGREGATE、DEFAULT、FUNCTION、LOGICAL FILE NAME、PROCEDURE、QUEUE、RULE、SYNONYM、TABLE、TABLE_TYPE、TYPE、VIEW、XML SCHEMA COLLECTION、および NULL です。[ @level1name= ] { 'level1_object_name' }
指定したレベル 1 のオブジェクトの種類の名前です。 level1_object_name のデータ型は sysname で、既定値は NULL です。[ @level2type= ] { 'level2_object_type' }
レベル 2 のオブジェクトの種類です。 level2_object_type のデータ型は varchar(128) で、既定値は NULL です。 有効な値は、COLUMN、CONSTRAINT、EVENT NOTIFICATION、INDEX、PARAMETER、TRIGGER、および NULL です。[ @level2name= ] { 'level2_object_name' }
指定したレベル 2 のオブジェクトの種類の名前です。 level2_object_name のデータ型は sysname で、既定値は NULL です。
リターン コードの値
0 (成功) または 1 (失敗)
説明
拡張プロパティを指定するために、SQL Server データベース内のオブジェクトは 3 つのレベル (0、1、2) に分けられています。 レベル 0 は、データベース スコープに含まれる最上位レベルのオブジェクトとして定義されます。 レベル 1 のオブジェクトはスキーマ スコープまたはユーザー スコープに含まれ、レベル 2 のオブジェクトはレベル 1 のオブジェクトに含まれます。 これら、どのレベルのオブジェクトに対しても、拡張プロパティを定義できます。
1 つのレベルにあるオブジェクトを参照する場合は、そのオブジェクトを所有または格納する上位レベルのオブジェクトの名前で修飾する必要があります。 たとえば、拡張プロパティをテーブル列 (レベル 2) に追加する場合、その列を含むテーブル名 (レベル 1) とそのテーブルを含むスキーマ (レベル 0) も指定する必要があります。
すべてのオブジェクトの種類および名前が NULL である場合、プロパティは現在のデータベースそのものに属します。
拡張プロパティは、システム オブジェクト、ユーザー定義データベースのスコープ外のオブジェクト、または「引数」で有効な入力として示されないオブジェクトでは使用できません。
拡張プロパティのレプリケート
拡張プロパティは、パブリッシャーとサブスクライバー間で初期同期を実行するときにのみレプリケートされます。 初期同期の完了後に拡張プロパティを追加または変更した場合、その変更はレプリケートされません。 データベース オブジェクトのレプリケート方法の詳細については、「データとデータベース オブジェクトのパブリッシュ」を参照してください。
スキーマとユーザー
名前解決にあいまいさが発生する可能性があるため、拡張プロパティをデータベース オブジェクトに適用するときに USER をレベル 0 の種類として指定することをお勧めしません。 たとえば、ユーザー Mary が 2 つのスキーマ (Mary と MySchema) を所有し、これらのスキーマの両方に MyTable という名前のテーブルがある場合を考えます。 Mary が拡張プロパティをテーブル MyTable に追加し、@level0type = N'USER'、@level0name = Mary と指定した場合、拡張プロパティの適用先がどちらのテーブルであるかが明確ではなくなります。 旧バージョンとの互換性を維持するために、SQL Server では Mary という名前のスキーマに含まれているテーブルにプロパティが適用されます。
権限
固定データベース ロール db_owner および db_ddladmin のメンバーは、任意のオブジェクトに拡張プロパティを追加できます。ただし、例外として、db_ddladmin はデータベース自体、ユーザー、またはロールにプロパティを追加できません。
ユーザーは、自身が所有するオブジェクトや、ALTER 権限または CONTROL 権限を持つオブジェクトの拡張プロパティを追加できます。
使用例
A. 拡張プロパティをデータベースに追加する
次の例では、値 'AdventureWorks2012 Sample OLTP Database' を持つプロパティ名 'Caption' を AdventureWorks2012 サンプル データベースに追加します。
USE AdventureWorks2012;
GO
--Add a caption to the AdventureWorks2012 Database object itself.
EXEC sp_addextendedproperty
@name = N'Caption',
@value = 'AdventureWorks2012 Sample OLTP Database';
B. 拡張プロパティをテーブル内の列に追加する
次の例では、テーブル Address 内の列 PostalCode にタイトルのプロパティを追加します。
USE AdventureWorks2012;
GO
EXEC sp_addextendedproperty
@name = N'Caption',
@value = 'Postal code is a required column.',
@level0type = N'Schema', @level0name = 'Person',
@level1type = N'Table', @level1name = 'Address',
@level2type = N'Column', @level2name = 'PostalCode';
GO
C. 定型入力プロパティを列に追加する
次の例では、定型入力プロパティ '99999 or 99999-9999 or #### ###' をテーブル Address 内の列 PostalCode に追加します。
USE AdventureWorks2012;
GO
EXEC sp_addextendedproperty
@name = N'Input Mask ', @value = '99999 or 99999-9999 or #### ###',
@level0type = N'Schema', @level0name = 'Person',
@level1type = N'Table', @level1name = 'Address',
@level2type = N'Column',@level2name = 'PostalCode';
GO
D. 拡張プロパティをファイル グループに追加する
次の例では、拡張プロパティが PRIMARY ファイル グループに追加されます。
USE AdventureWorks2012;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Primary filegroup for the AdventureWorks2012 sample database.',
@level0type = N'FILEGROUP', @level0name = 'PRIMARY';
GO
E. 拡張プロパティをスキーマに追加する
次の例では、拡張プロパティが HumanResources スキーマに追加されます。
USE AdventureWorks2012;
GO
EXECUTE sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Contains objects related to employees and departments.',
@level0type = N'SCHEMA',
@level0name = 'HumanResources';
F. 拡張プロパティをテーブルに追加する
次の例では、拡張プロパティが Person スキーマ内の Address テーブルに追加されます。
USE AdventureWorks2012;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Street address information for customers, employees, and vendors.',
@level0type = N'SCHEMA', @level0name = 'Person',
@level1type = N'TABLE', @level1name = 'Address';
GO
G. 拡張プロパティをロールに追加する
次の例では、アプリケーション ロールが作成され、拡張プロパティがロールに追加されます。
USE AdventureWorks2012;
GO
CREATE APPLICATION ROLE Buyers
WITH Password = '987G^bv876sPY)Y5m23';
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'Application Role for the Purchasing Department.',
@level0type = N'USER',
@level0name = 'Buyers';
H. 拡張プロパティを型に追加する
次の例では、拡張プロパティが型に追加されます。
USE AdventureWorks2012;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'Data type (alias) to use for any column that represents an order number. For example a sales order number or purchase order number.',
@level0type = N'SCHEMA',
@level0name = N'dbo',
@level1type = N'TYPE',
@level1name = N'OrderNumber';
I. 拡張プロパティをユーザーに追加する
次の例では、ユーザーが作成され、拡張プロパティがユーザーに追加されます。
USE AdventureWorks2012;
GO
CREATE USER CustomApp WITHOUT LOGIN ;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'User for an application.',
@level0type = N'USER',
@level0name = N'CustomApp';
関連項目
参照
データベース エンジンのストアド プロシージャ (Transact-SQL)
sys.fn_listextendedproperty (Transact-SQL)