如何在SQL Server中找出缺失指定扩展属性或属性值的表
SQL Server 查找不符合规范的表(缺失/空值扩展属性)
直接用下面的脚本,就能精准找出两类不符合规范的表:
WITH RequiredProperties AS ( -- 定义必填的三个扩展属性名称 SELECT 'Name' AS PropName UNION ALL SELECT 'Date' UNION ALL SELECT 'Link to Doku' ), TableProps AS ( -- 生成所有表与必填属性的组合,确保每个表都要检查这三个属性 SELECT t.name AS TableName, rp.PropName FROM sys.tables t CROSS JOIN RequiredProperties rp ) SELECT tp.TableName, STRING_AGG( CASE WHEN ep.value IS NULL THEN '缺失扩展属性:' + tp.PropName WHEN ep.value = '' THEN '扩展属性' + tp.PropName + '的值为空' END, ';' ) AS Problem FROM TableProps tp LEFT JOIN sys.extended_properties ep ON ep.major_id = OBJECT_ID(tp.TableName) AND ep.minor_id = 0 -- 0指定只检查表级扩展属性(非列级) AND ep.name = tp.PropName WHERE ep.value IS NULL -- 属性完全缺失 OR ep.value = '' -- 属性存在但值为空 GROUP BY tp.TableName ORDER BY tp.TableName;
关键说明
RequiredProperties:把必填属性列出来,后续要调整属性名称直接改这里就行CROSS JOIN:让每个表都对应三个必填属性,避免漏检任何一个要求项minor_id = 0:确保只检查表本身的扩展属性,不会误查列的属性STRING_AGG:把同一个表的多个问题合并到一个字段,结果更直观
示例输出
| TableName | Problem |
|---|---|
| Customers | 缺失扩展属性:Name |
| Orders | 扩展属性Date的值为空 |
| Products | 缺失扩展属性:Link to Doku;扩展属性Name的值为空 |
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

