SQL Server使用sp_addextendedproperty添加列扩展属性不生效问题咨询
问题排查结果
- 错误1:查询扩展属性的过滤条件设置错误
sys.extended_properties系统表的name字段存储的是你自定义的扩展属性标识(也就是你语句中@name参数传入的SPLV),而你查询时过滤条件写的是表名SelfService_Patients,匹配不到任何数据,自然返回空结果。
正确的查询该表所有扩展属性的语句如下:
SELECT ep.name AS 扩展属性名, ep.value AS 扩展属性值, t.name AS 关联表名, c.name AS 关联列名 FROM sys.extended_properties ep LEFT JOIN sys.tables t ON ep.major_id = t.object_id LEFT JOIN sys.columns c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE t.name = 'SelfService_Patients' AND SCHEMA_NAME(t.schema_id) = 'assurance'
- 错误2:SSMS查看扩展属性的位置错误
你执行的sp_addextendedproperty语句指定了@level2type = N'Column',属于列级扩展属性,而SSMS表属性页的「扩展属性」默认展示的是表级扩展属性,所以看不到你添加的标注。你需要右键点击对应SPLV列,选择「属性-扩展属性」即可看到已添加的标注,若刷新后仍未显示可重启SSMS重新加载缓存。
批量添加列扩展属性参考
如果你需要给22个列统一添加含义标注,可以用以下语句批量生成执行脚本,避免手动逐列编写:
SELECT 'EXEC sp_addextendedproperty @name = N''ColumnDescription'' ,@value = N''此处替换为对应列的实际含义'' ,@level0type = N''Schema'', @level0name = ''assurance'' ,@level1type = N''Table'', @level1name = ''SelfService_Patients'' ,@level2type = N''Column'', @level2name = ''' + c.name + ''' GO' AS 待执行脚本 FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE t.name = 'SelfService_Patients' AND SCHEMA_NAME(t.schema_id) = 'assurance' -- 排除不需要添加标注的1列 AND c.name != '此处替换为不需要标注的列名'
内容的提问来源于stack exchange,提问作者AndrewK
相关产品推荐
相关产品推荐

