当前位置: 首页 > 面试题库 >

SQL Server通过脚本管理列描述

夏建木
2023-03-14
问题内容

有没有一种方法可以通过脚本更改/更新和删除/删除列说明?

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

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

解决方案

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

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的建议,您可以使用以下方法检查扩展proc的存在:

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


 类似资料:
  • 我有这样的设置: 所有.飞镖只是导入脚本1.飞镖和脚本2.dart并调用它们的主要。目标是在细节下有一堆可以单独运行的脚本。此外,我想要一个单独的 all.dart 脚本,可以一次运行所有脚本。这将使调试单个脚本更简单,但仍允许所有脚本运行。 all.dart 脚本1.飞镖 脚本2.dart 所以,这是工作,我看到运行时预期的打印语句all.dart但我有两个问题。 首先,我必须在详细信息下软链接

  • 我对环境并不陌生。我有一个以下脚本,用于创建包含少量列的表。 我想要的是使主键列成为一个自动递增的列,这可以通过上面的sql脚本实现吗? 就像在中一样,您可以指定来使列自动递增。oracle有这样的选项吗?

  • 问题内容: 我的公司刚刚完成了年度审核流程,我终于说服了他们,该是时候找到一个更好的解决方案来管理我们的SQL模式/脚本。目前,我们只有几个脚本可以手动更新。 我曾在另一家公司使用过VS2008 Database Edition,这是一个了不起的产品。我的老板要我看一下Redgate的SQL Compare,并寻找其他可能更好的产品。SQL Compare似乎也是一个很好的产品。但是,看起来他们没

  • 理解自动内存管理 当创建一个对象、字符串或数组时,会从名为 堆 的中央池中分配一块内存,用来所存储创建的值。当这些值不再被使用时,被占用的内存可以被回收,并用于存储其他的值。在过去,是由程序员显示地调用相应的函数分配和释放堆内存。如今,像 Unity Mono 引擎这样的运行时系统,可以自动地管理内容。相比显示地分配和释放内存,自动内存管理需要的编码工作更少,并且大大降低了发生内存泄露的可能性(例

  • 问题内容: 是否有任何聪明的方法可以通过ssh在远程主机上运行本地Bash功能? 例如: 是的,我知道这行不通,但是有办法实现吗? 问题答案: 您可以使用该命令通过来使功能在远程计算机上可用。有多个选项,具体取决于您要如何运行远程脚本。 要在远程主机上使用该功能: 更好的是,为什么还要麻烦管道: 或者,您可以使用HEREDOC: 如果要发送脚本中定义的所有函数,而不仅仅是发送,请像这样使用: 说明

  • 问题内容: 我正在尝试使用Linux crontab执行python脚本。我想每10分钟运行一次此脚本。 我找到了很多解决方案,但都无济于事。例如:在/etc/cron.d中编辑anacron或使用。我将此行放在文件的末尾,但它没有任何改变。我需要重启任何服务吗? 我必须编辑哪个文件来配置它? 提前致谢 这是脚本。 问题答案: 只需使用并按照此处的教程操作即可。 请参阅第3点,以获取有关如何指定频