sp_updateextendedproperty (Transact-SQL)

更新现有扩展属性的值。

主题链接图标Transact-SQL 语法约定

语法

sp_updateextendedproperty
    [ @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'}
    用户或用户定义类型。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。

    重要说明重要提示

    作为级别 0 类型的 USER 和 TYPE 将在 SQL Server 的未来版本中删除。请避免在新的开发工作中使用这些功能,并考虑修改当前使用这些功能的应用程序。改用 SCHEMA 替代 USER 作为级别 0 类型。对于 TYPE,请使用 SCHEMA 作为级别 0 类型,使用 TYPE 作为级别 1 类型。

  • [ @level0name = ]{ 'level0_object_name'}
    所指定的级别 1 对象类型的名称。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、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 对象中。可以为这些级别中任一级别的对象定义扩展属性。引用某个等级中的对象必须用拥有或包含它们的更高等级对象的名称进行限制。有关对象及其有效的级别 0、1 和 2 类型的完整列表,请参阅对数据库对象使用扩展属性

给定有效的 property_name 和 value,如果所有的对象类型和名称均为空值,则被更新的属性就属于当前数据库。

权限

db_owner 和 db_ddladmin 固定数据库角色的成员可以更新任何对象的扩展属性,但以下情况例外:db_ddladmin 不能向数据库本身添加属性,也不能向用户或角色中添加属性。

用户可以更新其拥有的对象的扩展属性,也可更新其拥有 ALTER 或 CONTROL 权限的扩展属性。有关所需权限的完整列表,请参阅对数据库对象使用扩展属性

示例

A. 对列更新扩展属性

以下示例对 T1 表的 ID 列更新 Caption 属性的值。

USE AdventureWorks2008R2;
GO
CREATE TABLE T1 (id int , name char (20));
GO
EXEC sp_addextendedproperty 
    @name = N'Caption'
    ,@value = N'Employee ID'
    ,@level0type = N'Schema', @level0name = dbo
    ,@level1type = N'Table',  @level1name = T1
    ,@level2type = N'Column', @level2name = id;
GO
--Update the extended property.
EXEC sp_updateextendedproperty 
    @name = N'Caption'
    ,@value = 'Employee ID must be unique.'
    ,@level0type = N'Schema', @level0name = dbo
    ,@level1type = N'Table',  @level1name = T1
    ,@level2type = N'Column', @level2name = id;
GO

B. 对数据库更新扩展属性

以下示例将先对 AdventureWorks2008R2 示例数据库创建扩展属性,然后更新该属性的值。

USE AdventureWorks2008R2;
GO
EXEC sp_addextendedproperty 
@name = N'NewCaption', @value = 'AdventureWorks2008R2 Sample OLTP Database';
GO
USE AdventureWorks2008R2;
GO
EXEC sp_updateextendedproperty 
@name = N'NewCaption', @value = 'AdventureWorks2008R2 Sample Database';
GO