SQL Server通过脚本管理列描述

标签 sql sql-server

有没有办法通过脚本更改/更新和删除/删除列描述?

我使用sp_addextendedproperty添加描述,但它不允许更新。当我尝试使用相同的 sp 更新现有描述值时,它会显示类似“描述属性已存在”的内容

更改或删除/创建类似的解决方案对我来说都可以。

解决方案

在获得有用的答案和评论后,您可以在下面看到我的最终解决方案。可以帮助某人。

create procedure sp_set_column_description (
    @schema varchar(256),
    @table varchar(256),
    @column varchar(256),
    @description varchar(256))
    as
begin
    if exists (
        select p.* 
        from
            sys.extended_properties p, 
            sys.columns c, 
            sys.tables t, 
            sys.schemas s
        where
            t.schema_id = s.schema_id and
            c.object_id = t.object_id and
            p.major_id = t.object_id and
            p.minor_id = c.column_id and
            p.name = N'MS_Description' and 
            s.name = @schema and
            t.name = @table and
            c.name = @column
    )
        exec sys.sp_updateextendedproperty 
            @level0type=N'SCHEMA', @level0name=@schema,
            @level1type=N'TABLE', @level1name=@table,
            @level2type=N'COLUMN', @level2name=@column,
            @name=N'MS_Description', @value=@description
    else
        exec sys.sp_addextendedproperty 
            @level0type=N'SCHEMA', @level0name=@schema,
            @level1type=N'TABLE', @level1name=@table,
            @level2type=N'COLUMN', @level2name=@column,
            @name=N'MS_Description', @value=@description
end

go

create procedure sp_drop_column_description (
    @schema varchar(256),
    @table varchar(256),
    @column varchar(256))
    as
begin
    if exists (
        select p.* 
        from
            sys.extended_properties p, 
            sys.columns c, 
            sys.tables t, 
            sys.schemas s
        where
            t.schema_id = s.schema_id and
            c.object_id = t.object_id and
            p.major_id = t.object_id and
            p.minor_id = c.column_id and
            p.name = N'MS_Description' and 
            s.name = @schema and
            t.name = @table and
            c.name = @column
    )
        exec sys.sp_dropextendedproperty 
            @level0type=N'SCHEMA', @level0name=@schema,
            @level1type=N'TABLE', @level1name=@table,
            @level2type=N'COLUMN', @level2name=@column,
            @name=N'MS_Description'
end

最佳答案

结合Steph Locke的建议,您可以使用以下方法检查扩展过程是否存在:

if exists(
    SELECT  * 
    FROM    sys.extended_properties p
            join sys.columns c on p.major_id = c.object_id and p.minor_id = c.column_id 
    where   p.major_id = OBJECT_ID('yourtablename','table')
            and p.name = 'Description'  
)

关于SQL Server通过脚本管理列描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17086651/

相关文章:

c# - 从 C# 将字节数组插入 SQL Server 以及如何检索它

mysql - 在有或没有索引的情况下复制数据库?

sql-server - T-SQL 从一个表中为多个组选择一行

c# - 加载 Zumero 模块依赖项时遇到问题

sql-server - SQL Server 2017安装卡住了

.net - 衡量函数、类和进程速度的最佳方法

java - 通过 SQL "select * from "从 java 存储过程返回结果集

sql - Oracle:如何设置用户密码未过期?

mysql - 我们如何对 SQL 二进制数据类型执行操作?

MySQL查找和替换——添加换行符