sp_addextendedproperty (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
新しい拡張プロパティをデータベース オブジェクトに追加します。
構文
sp_addextendedproperty
[ @name = ] N'name'
[ , [ @value = ] value ]
[ , [ @level0type = ] 'level0type' ]
[ , [ @level0name = ] N'level0name' ]
[ , [ @level1type = ] 'level1type' ]
[ , [ @level1name = ] N'level1name' ]
[ , [ @level2type = ] 'level2type' ]
[ , [ @level2name = ] N'level2name' ]
[ ; ]
引数
[ @name = ] N'name'
追加するプロパティの名前。 @name は既定 sysnameであり、 NULL
することはできません。 名前には、空白または英数字以外の文字列とバイナリ値を含めることができます。
[ @value = ] value
プロパティに関連付ける値。 @value は sql_variantで、既定値は NULL
です。 @valueのサイズは 7,500 バイトを超えることはできません。
[ @level0type = ] 'level0type'
レベル 0 オブジェクトの型。 @level0type は 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 型オブジェクトの拡張プロパティでレベル 0 型として USER
を指定する機能は、今後のバージョンの SQL Server で削除される予定です。 代わりに、レベル 0 の型として SCHEMA
を使用します。 たとえば、テーブルで拡張プロパティを定義するときに、ユーザー名の代わりにテーブルのスキーマを指定します。 TYPE
をレベル 0 型として指定する機能は、今後のバージョンの SQL Server で削除される予定です。 TYPE の場合は、レベル 0 の型として SCHEMA
を使用し、レベル 1 の型として TYPE
します。
[ @level0name = ] N'level0name'
指定されたレベル 0 のオブジェクト型の名前。 @level0name は sysname で、既定値は NULL
です。
[ @level1type = ] 'level1type'
レベル 1 オブジェクトの型。 @level1type は varchar(128) で、既定値は NULL
です。
有効な入力は次のとおりです。
AGGREGATE
DEFAULT
FUNCTION
LOGICAL FILE NAME
PROCEDURE
QUEUE
RULE
SEQUENCE
SYNONYM
TABLE
TABLE_TYPE
TYPE
VIEW
XML SCHEMA COLLECTION
NULL
[ @level1name = ] N'level1name'
指定されたレベル 1 のオブジェクト型の名前。 @level1name は sysname で、既定値は NULL
です。
[ @level2type = ] 'level2type'
レベル 2 オブジェクトの型。 @level2type は varchar(128) で、既定値は NULL
です。
有効な入力は次のとおりです。
COLUMN
CONSTRAINT
EVENT NOTIFICATION
INDEX
PARAMETER
TRIGGER
NULL
[ @level2name = ] N'level2name'
指定されたレベル 2 のオブジェクト型の名前。 @level2name は sysname で、既定値は NULL
です。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
拡張プロパティを指定すると、SQL Server データベース内のオブジェクトは 0、1、2 の 3 つのレベルに分類されます。 レベル 0 は、データベース スコープに含まれる最上位レベルのオブジェクトとして定義されます。 レベル 1 のオブジェクトはスキーマ スコープまたはユーザー スコープに含まれ、レベル 2 のオブジェクトはレベル 1 のオブジェクトに含まれます。 これら、どのレベルのオブジェクトに対しても、拡張プロパティを定義できます。
1 つのレベルにあるオブジェクトを参照する場合は、そのオブジェクトを所有または格納する上位レベルのオブジェクトの名前で修飾する必要があります。 たとえば、拡張プロパティをテーブル列 (レベル 2) に追加する場合、その列を含むテーブル名 (レベル 1) とそのテーブルを含むスキーマ (レベル 0) も指定する必要があります。
すべてのオブジェクトの種類および名前が NULL である場合、プロパティは現在のデータベースそのものに属します。
拡張プロパティは、システム オブジェクト、ユーザー定義データベースの範囲外のオブジェクト、または有効な入力として引数にリストされていないオブジェクトでは使用できません。
メモリ最適化テーブルでは、拡張プロパティは使用できません。
拡張プロパティをレプリケートする
拡張プロパティは、パブリッシャーとサブスクライバー間で初期同期を実行するときにのみレプリケートされます。 初期同期後に拡張プロパティを追加または変更した場合、変更はレプリケートされません。 データベース オブジェクトをレプリケートする方法の詳細については、「 Publish Data and Database Objectsを参照してください。
スキーマとユーザー
拡張プロパティをデータベース オブジェクトに適用する場合、 USER
をレベル 0 型として指定することはお勧めしません。これは名前解決のあいまいさを引き起こす可能性があるためです。 たとえば、ユーザー Mary
が 2 つのスキーマ (Mary
と MySchema
) を所有しており、これらのスキーマの両方に MyTable
という名前のテーブルが含まれているとします。 Mary がテーブル MyTable
に拡張プロパティを追加し、 @level0type = 'USER', @level0name = N'Mary'
を指定した場合、拡張プロパティがどのテーブルに適用されるかは明らかではありません。 下位互換性を維持するために、SQL Server は、 Mary
という名前のスキーマに含まれるテーブルにプロパティを適用します。
アクセス許可
db_ownerおよびdb_ddladmin固定データベース ロールのメンバーは、次の例外を除き、任意のオブジェクトに拡張プロパティを追加できます。db_ddladminは、データベース自体またはユーザーまたはロールにプロパティを追加できません。
ユーザーは、自身が所有するオブジェクトや、ALTER 権限または CONTROL 権限を持つオブジェクトの拡張プロパティを追加できます。
例
A. データベースに拡張プロパティを追加する
次の例では、値 Caption
を持つプロパティ名 AdventureWorks2022 Sample OLTP Database
を AdventureWorks2022
サンプル データベースに追加します。
USE AdventureWorks2022;
GO
--Add a caption to the AdventureWorks2022 Database object itself.
EXEC sp_addextendedproperty @name = N'Caption',
@value = 'AdventureWorks2022 Sample OLTP Database';
B. テーブル内の列に拡張プロパティを追加する
次の例では、テーブル PostalCode
内の列 Address
にタイトルのプロパティを追加します。
USE AdventureWorks2022;
GO
EXEC sp_addextendedproperty @name = N'Caption',
@value = 'Postal code is a required column.',
@level0type = 'SCHEMA', @level0name = N'Person',
@level1type = 'TABLE', @level1name = N'Address',
@level2type = 'COLUMN', @level2name = N'PostalCode';
GO
C: 列に入力マスク プロパティを追加する
次の例では、テーブル Address
の列PostalCode
に入力マスク プロパティ 99999 or 99999-9999 or #### ###
を追加します。
USE AdventureWorks2022;
GO
EXEC sp_addextendedproperty @name = N'Input Mask ',
@value = '99999 or 99999-9999 or #### ###',
@level0type = 'SCHEMA', @level0name = N'Person',
@level1type = 'TABLE', @level1name = N'Address',
@level2type = 'COLUMN', @level2name = N'PostalCode';
GO
D. 拡張プロパティをファイル グループに追加する
次の例では、拡張プロパティが PRIMARY
ファイル グループに追加されます。
USE AdventureWorks2022;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_DescriptionExample',
@value = N'Primary filegroup for the AdventureWorks2022 sample database.',
@level0type = 'FILEGROUP', @level0name = N'PRIMARY';
GO
E. 拡張プロパティをスキーマに追加する
次の例では、拡張プロパティが HumanResources
スキーマに追加されます。
USE AdventureWorks2022;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_DescriptionExample',
@value = N'Contains objects related to employees and departments.',
@level0type = 'SCHEMA', @level0name = N'HumanResources';
F. 拡張プロパティをテーブルに追加する
次の例では、拡張プロパティが Address
スキーマ内の Person
テーブルに追加されます。
USE AdventureWorks2022;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_DescriptionExample',
@value = N'Street address information for customers, employees, and vendors.',
@level0type = 'SCHEMA', @level0name = N'Person',
@level1type = 'TABLE', @level1name = N'Address';
GO
G. 拡張プロパティをロールに追加する
次の例では、アプリケーション ロールが作成され、拡張プロパティがロールに追加されます。
USE AdventureWorks2022;
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 = 'USER', @level0name = N'Buyers';
H. 拡張プロパティを型に追加する
次の例では、拡張プロパティが型に追加されます。
USE AdventureWorks2022;
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 = 'SCHEMA', @level0name = N'dbo',
@level1type = 'TYPE', @level1name = N'OrderNumber';
I. 拡張プロパティをユーザーに追加する
次の例では、ユーザーが作成され、拡張プロパティがユーザーに追加されます。
USE AdventureWorks2022;
GO
CREATE USER CustomApp WITHOUT LOGIN;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_Description',
@value = N'User for an application.',
@level0type = 'USER', @level0name = N'CustomApp';