共用方式為


sp_addextendedproperty (Transact-SQL)

 

將新的擴充屬性加入資料庫物件中。

適用於:SQL Server (SQL Server 2008 至目前版本)、SQL Database V12。

主題連結圖示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_namesysname,且不能是 NULL。名稱也可包含空白或非英數字元字串,以及二進位值。

  • [ @value= ] { 'value'}
    這是與屬性相關聯的值。valuesql_variant,預設值是 NULL。value 的大小不能超過 7,500 個位元組。

  • [ @level0type= ] { 'level0_object_type' }
    這是層級 0 物件的類型。level0_object_typevarchar(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。

    System_CAPS_important重要事項

    SQL Server將 USER 指定為層級 1 類型物件擴充屬性中之層級 0 類型的功能,將在未來的 版本中移除。請改用 SCHEMA 做為層級 0 類型。例如,在資料表上定義擴充屬性時,請指定資料表的結構描述代替使用者名稱。SQL Server將 TYPE 指定為層級 0 類型的功能,將在未來的 版本中移除。如果是 TYPE,請使用 SCHEMA 當做層級 0 類型,並使用 TYPE 當做層級 1 類型。

  • [ @level0name= ] { 'level0_object_name' }
    這是所指定之層級 0 物件類型的名稱。level0_object_namesysname,預設值是 NULL。

  • [ @level1type= ] { 'level1_object_type' }
    這是層級 1 物件的類型。level1_object_typevarchar(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_namesysname,預設值是 NULL。

  • [ @level2type= ] { 'level2_object_type' }
    這是層級 2 物件的類型。level2_object_typevarchar(128),預設值是 NULL。有效輸入如下:COLUMN、CONSTRAINT、EVENT NOTIFICATION、INDEX、PARAMETER、TRIGGER 和 NULL。

  • [ @level2name= ] { 'level2_object_name' }
    這是所指定之層級 2 物件類型的名稱。level2_object_namesysname,預設值是 NULL。

傳回碼值

0 (成功) 或 1 (失敗)

備註

為了指定擴充屬性,SQL Server 資料庫中的物件分為三種層級:0、1 和 2。層級 0 是最高層級,且定義為包含在資料庫範圍的物件。層級 1 物件包含在結構描述或使用者範圍中,層級 2 物件包含在層級 1 物件中。任何這些層級的物件都可以定義擴充屬性。

對一個層級中物件的參考必須用擁有或包含其較高層級物件的名稱來限定。例如,當您將擴充屬性加入至資料表資料行 (層級 2) 時,您也必須指定包含該資料行的資料表名稱 (層級 1) 和包含該資料表的結構描述 (層級 0)。

如果所有物件類型和名稱都是 NULL,屬性屬於目前資料庫本身。

擴充屬性不得用於系統物件、使用者自訂資料庫範圍外的物件,或未列在引數中做為有效輸入的物件。

複寫擴充屬性

只在發行者與訂閱者之間的初始同步處理中複寫擴充屬性。如果您在初始同步處理之後加入或修改擴充屬性,就不會複寫這項變更。如需有關如何複寫資料庫物件的詳細資訊,請參閱<發行資料和資料庫物件>。

結構描述與使用者

不建議您在將擴充屬性套用至資料庫物件時指定 USER 當做層級 0 類型,因為這會造成名稱解析模稜兩可。例如,假設使用者 Mary 擁有兩個結構描述 (Mary 和 MySchema),而這兩個結構描述都包含一個名為 的資料表MyTable。MyTable如果 Mary 將擴充屬性加入至 資料表,且指定 @level0type = N'USER'@level0name = Mary,則未明確指出擴充屬性到底要套用至哪一份資料表。SQL Server為了維持回溯相容性,Mary 將套用屬性至包含在名為 之結構描述中的資料表。

Permissions

db_owner 和 db_ddladmin 固定資料庫角色的成員可將擴充屬性加入至任何物件,但下列為例外狀況:db_ddladmin 不能將屬性加入至資料庫本身或加入至使用者或角色。

使用者可將擴充屬性加入至他們擁有的物件或他們具有 ALTER 或 CONTROL 權限的物件。

範例

A.將擴充屬性加入至資料庫

'Caption'下列範例將一個含有 'AdventureWorks2012 Sample OLTP Database' 值的屬性名稱 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.將擴充屬性加入至資料表中的資料行

PostalCode下列範例將標題屬性加入至 Address 資料表中的 資料行。

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 #### ###下列範例將 'PostalCode' 輸入遮罩屬性加入至 Address 資料表中的 資料行。

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.將擴充屬性加入至資料表

Address下列範例會將擴充屬性加入至 Person 結構描述中的 資料表。

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';

請參閱

Database Engine 預存程序 (Transact-SQL)
sys.fn_listextendedproperty (Transact-SQL)
sp_dropextendedproperty (Transact-SQL)
sp_updateextendedproperty (Transact-SQL)