在 SQL Server 2008 上创建表的 SQL 注释

新手上路,请多包涵

我需要在 SQL Server 2008 中创建一些相当大的表。虽然我确实有 SQL Server Management Studio (SSMS),但我想在创建表时对表和列进行注释。我该怎么做呢?

我正在运行的查询示例:

 CREATE TABLE cert_Certifications
(
  certificationID int PRIMARY KEY IDENTITY,
  profileID int,
  cprAdultExp datetime null
)

我在数据类型之后尝试了 COMMENT’Expiration Date for the Adult CPR’ 和 COMMENT=‘Expiration Date for the Adult CPR’,但 SQL Server 给了我一个错误。

原文由 Snow_Mac 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

您可以通过创建所谓的扩展属性来为表和列添加注释。您可以将扩展属性放在表级别和列级别。这可以通过 T-SQL 或 SSMS 完成。

例如,在 T-SQL 中,它看起来像这样:

 sp_addextendedproperty 'BackColor', 'Red', 'user', '<schema name>', 'table', '<table name', 'column', '<column name>'.

您可以在 _sp_addextendedproperty (Transact-SQL)_ 上阅读有关它的更多信息。

原文由 Randy Minder 发布,翻译遵循 CC BY-SA 4.0 许可协议

虽然它没有直接回答原始问题( J Henzel 和 Randy Minder 已经回答了!)我想分享一些我刚刚写的东西,这对于那些必须评论很多表格和列的人来说非常有用。

以下查询:

 -- Generate comments templates for all tables
SELECT
'EXEC sys.sp_addextendedproperty
    @name=N''TableDescription'',
    @level0type=N''SCHEMA'',
    @level1type=N''TABLE'',
    @level0name=N''' + TABLE_SCHEMA + ''',
    @level1name=N''' + TABLE_NAME + ''',
    @value=N''TODO'';'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME NOT like 'sys%'
order by TABLE_SCHEMA, TABLE_NAME

-- Generate comments templates for all columns
SELECT 'EXECUTE sp_addextendedproperty
    @name = ''ColumnDescription'',
    @level0type = ''SCHEMA'',
    @level1type = N''TABLE'',
    @level2type = N''COLUMN'',
    @level0name=N''' + TABLE_SCHEMA + ''',
    @level1name=N''' + TABLE_NAME + ''',
    @level2name = N''' + COLUMN_NAME + ''',
    @value = ''TODO'';'
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA not like 'sys%' and TABLE_NAME not like 'sysdiagrams%'
  order by TABLE_SCHEMA, TABLE_NAME, case when ORDINAL_POSITION = 1 then '0' else COLUMN_NAME end

将在 SQL Server 输出中生成对数据库 中所有表和所有列的 sp_addextendedproperty 的调用列表,通过查询系统表来收集它们。

当然,它不会为您神奇地注释它,但至少您只需在“TODO”占位符中填充您想要描述的所有对象的相关注释并执行它。

它避免了您手动编写所有调用并节省了大量时间,并且您不会忘记表格或列,所以我希望它对其他人有用。

旁注:

请注意“sys”上的 WHEREs 中的过滤器:它在这里排除系统对象,但根据您的对象名称,您可能需要对您的表进行一些微调,以使表名称相似。

此外,我的数据库中根本没有任何评论,所以我的查询返回所有表/列。它不考虑是否已经有评论。

原文由 AFract 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进