批量编辑表和列描述

car*_*reo 2 sql-server sql-server-2014

在 StackOverflow 上的一个问题中,我发现了这个查询,它显示了当前数据库中所有表的表和列描述:

SELECT      u.name + '.' + t.name AS [table],
            td.value AS [table_desc],
            c.name AS [column],
            cd.value AS [column_desc]
FROM        sysobjects t
INNER JOIN  sysusers u
    ON      u.uid = t.uid
LEFT OUTER JOIN sys.extended_properties td
    ON      td.major_id = t.id
    AND     td.minor_id = 0
    AND     td.name = 'MS_Description'
INNER JOIN  syscolumns c
    ON      c.id = t.id
LEFT OUTER JOIN sys.extended_properties cd
    ON      cd.major_id = c.id
    AND     cd.minor_id = c.colid
    AND     cd.name = 'MS_Description'
WHERE t.type = 'u'
ORDER BY    t.name, c.colorder
Run Code Online (Sandbox Code Playgroud)

这对我很有帮助,因为我立即看到了所有没有描述的表和列。现在,能够直接编辑这些描述真的很酷。是否有允许批量编辑表格和/或列的描述的软件?

Ken*_*her 5

您不能批量添加它们,但您可以很容易地生成命令。sys.sp_addextendedproperty如果还没有描述,我在查询中添加了两个额外的列,这些列添加了命令。您仍然需要手动修改每个的描述值,但这应该可以节省您一些时间。

SELECT      u.name + '.' + t.name AS [table],
            td.value AS [table_desc],
            CASE WHEN td.value IS NULL THEN 
                    'EXEC sys.sp_addextendedproperty @name=N''TableDescription'', ' + 
                        '@value=N''This is the table description'' , ' + 
                        '@level0type=N''SCHEMA'',@level0name=N'''+QUOTENAME(u.name)+''', ' + 
                        '@level1type=N''TABLE'',@level1name=N'''+QUOTENAME(t.name)+'''' END AS CreateTableNotes,
            c.name AS [column],
            cd.value AS [column_desc],
            CASE WHEN cd.value IS NULL THEN 
                    'EXEC sys.sp_addextendedproperty @name=N''ColumnDescription'', ' +
                        '@value=N''This is the column description'' , ' +
                        '@level0type=N''SCHEMA'',@level0name=N'''+QUOTENAME(u.name)+''', ' + 
                        '@level1type=N''TABLE'',@level1name=N'''+QUOTENAME(t.name)+''', ' +
                        '@level2type=N''COLUMN'',@level2name=N'''+QUOTENAME(c.name)+'''' END AS CreateColumnNotes
FROM        sysobjects t
INNER JOIN  sysusers u
    ON      u.uid = t.uid
LEFT OUTER JOIN sys.extended_properties td
    ON      td.major_id = t.id
    AND     td.minor_id = 0
    AND     td.name = 'MS_Description'
INNER JOIN  syscolumns c
    ON      c.id = t.id
LEFT OUTER JOIN sys.extended_properties cd
    ON      cd.major_id = c.id
    AND     cd.minor_id = c.colid
    AND     cd.name = 'MS_Description'
WHERE t.type = 'u'
ORDER BY    t.name, c.colorder
Run Code Online (Sandbox Code Playgroud)