sp_addextendedproperty (Transact-SQL)
適用於:SQL ServerAzure SQL 資料庫 Azure 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
擁有兩個架構 (Mary
和 MySchema
),而且這些架構都包含名為 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. 將擴充屬性新增至數據表中的數據行
下列範例會將 caption 屬性新增至數據表 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';