共用方式為


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 的未來版本將移除指定 USER 當做層級 1 類型物件之擴充屬性中層級 0 類型的功能。請改用 SCHEMA 做為層級 0 類型。例如,在資料表上定義擴充屬性時,請指定資料表的結構描述而非使用者名稱。SQL Server 的未來版本將移除指定 TYPE 當做層級 0 類型的功能。如果是 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 擁有兩個結構描述 (Mary 和 MySchema),而這兩個結構描述都包含一個名為 MyTable 的資料表。如果 Mary 將擴充屬性加入至 MyTable 資料表,並且指定 @level0type = N'USER'、@level0name = Mary,就無法清楚辨認是哪一個資料表套用了擴充屬性。為了維持回溯相容性,SQL Server 將套用屬性至包含在名為 Mary 之結構描述中的資料表。如需有關使用者和結構描述的詳細資訊,請參閱<使用者結構描述分隔>。

權限

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

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

範例

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

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

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

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

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

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

E. 將擴充屬性加入至結構描述

下列範例會將擴充屬性加入至 HumanResources 結構描述。

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