sp_addextendedproperty (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

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

Transact-SQL 語法慣例

語法

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

重要

未來版本的 SQL Server 將會移除在 level-1 類型物件的擴充屬性中指定 USER 為 level-0 類型的功能。 請 SCHEMA 改用 作為 level-0 類型。 例如,在數據表上定義擴充屬性時,請指定數據表的架構,而不是用戶名稱。 未來版本的 SQL Server 將會移除指定 TYPE 為 level-0 類型的功能。 針對 TYPE,請使用 SCHEMA 作為 level-0 類型,以及 TYPE 作為 level-1 類型。

[ @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。 層級 0 是最高層級,且定義為資料庫範圍中包含的物件。 層級 1 物件包含在架構或用戶範圍中,而層級 2 物件則由層級 1 物件所包含。 擴充屬性可以針對這些層級的任何物件定義。

一個層級中對象的參考必須以擁有或包含這些物件之較高層級物件的名稱限定。 例如,當您將擴充屬性新增至數據表數據行(層級 2),您也必須指定包含數據行的數據表名稱(層級 1),以及包含數據表的架構(層級 0)。

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

系統物件、使用者定義資料庫範圍以外的物件,或自變數中未列為有效輸入的物件,不允許擴充屬性。

記憶體優化數據表上不允許擴充屬性。

復寫擴充屬性

只在發行者與訂閱者之間的初始同步處理中複寫擴充屬性。 如果您在初始同步處理之後新增或修改擴充屬性,則不會復寫變更。 如需如何復寫資料庫對象的詳細資訊,請參閱 發佈數據和資料庫物件

架構與使用者

當您將擴充屬性套用至資料庫物件時,不建議將 指定 USER 為層級 0 類型,因為這可能會導致名稱解析模棱兩可。 例如,假設用戶 Mary 擁有兩個架構 (MaryMySchema),而且這些架構都包含名為 MyTable的數據表。 如果 Mary 將擴充屬性新增至數據表 MyTable 並指定 @level0type = 'USER', @level0name = N'Mary',則無法清楚套用擴充屬性的數據表。 為了維持回溯相容性,SQL Server 會將 屬性套用至名為 Mary之架構中包含的數據表。

權限

db_owner和db_ddladmin固定資料庫角色的成員可以將擴充屬性新增至任何物件,但有下列例外狀況:db_ddladmin無法將屬性新增至資料庫本身或使用者或角色。

用戶可以將擴充屬性新增至他們擁有的物件,或擁有 ALTER 或 CONTROL 許可權。

範例

A. 將擴充屬性新增至資料庫

下列範例會將 具有 值AdventureWorks2022 Sample OLTP Database的屬性名稱Caption新增至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. 將擴充屬性新增至數據表中的數據行

下列範例會將 標題 屬性新增至 數據表 Address中的數據行PostalCode

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. 將輸入遮罩屬性新增至數據行

下列範例會將輸入遮罩屬性99999 or 99999-9999 or #### ###新增至數據表 Address中的數據行PostalCode

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