sp_addextendedproperty (Transact-SQL)

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

主題連結圖示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 和 NULL。

    重要注意事項重要事項

    在未來的 SQL Server 版本中,會移除層級 0 類型的 USER 和 TYPE。請避免在新的開發工作中使用這些功能,並規劃修改目前使用這些功能的應用程式。請改用 SCHEMA 來作為層級 0 類型,而不是使用 USER。如果是 TYPE,請使用 SCHEMA 作為層級 0 類型,並使用 TYPE 作為層級 1 類型。

  • [@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 資料庫中的物件分為三種層級:0、1 和 2。層級 0 是最高層級,且定義為包含在資料庫範圍的物件。層級 1 物件包含在結構描述或使用者範圍中,層級 2 物件包含在層級 1 物件中。任何這些層級的物件都可以定義擴充屬性。

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

如需物件及有效層級 0、1 和 2 類型的完整清單,請參閱<使用資料庫物件的擴充屬性>。

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

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

複寫擴充屬性

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

結構描述與使用者

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

權限

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

使用者可將擴充屬性加入至他們擁有的物件或他們具有 ALTER 或 CONTROL 權限的物件。如需必要權限的完整清單,請參閱<使用資料庫物件的擴充屬性>。

範例

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

下列範例將一個含有 'AdventureWorks Sample OLTP Database' 值的屬性名稱 'Caption' 加入至 AdventureWorks 範例資料庫。

USE AdventureWorks;
GO
--Add a caption to the AdventureWorks Database object itself.
EXEC sp_addextendedproperty 
@name = N'Caption', @value = 'AdventureWorks Sample OLTP Database';

B. 將擴充屬性加入至資料表中的資料行

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

USE AdventureWorks;
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 AdventureWorks;
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 AdventureWorks;
GO
EXEC sys.sp_addextendedproperty 
@name = N'MS_DescriptionExample', 
@value = N'Primary filegroup for the AdventureWorks sample database.', 
@level0type = N'FILEGROUP', @level0name = [PRIMARY];
GO