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 的将来版本中将删除在级别 1 类型对象的扩展属性中将 USER 指定为级别 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 类型的完整列表,请参阅对数据库对象使用扩展属性

如果所有对象类型和名称都为空,则属性属于当前数据库本身。

对于系统对象、用户定义数据库的作用域以外的对象或者未在 Arguments 中作为有效输入列出的对象,不允许使用扩展属性。

复制扩展属性

扩展属性只在初始同步过程中在发布服务器和订阅服务器之间进行复制。如果在初始同步之后添加或修改扩展属性,则不会复制该更改。有关如何复制数据库对象的详细信息,请参阅发布数据和数据库对象

架构与用户

建议不要在将扩展属性应用于数据库对象时指定 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';