我正在寻找一种方法来扫描数据库中的所有表(或数据库中的选定表),并找出这些表的列中缺少的值(空值或空值)?有人可以告诉我这是否可行吗?如果是这样,查询将如何显示
答案 0 :(得分:0)
欢迎来到SO。我同意需要一个工作来提出解决方案,但是一个简单的起点就是使用SQL中的系统表创建一些动态SQL,然后可以运行对您的数据库。
SELECT 'SELECT ''' + o.[name] + ''' as Tbl, ''' + c.[name] + ''' as Col,
COUNT(*) as Nulls FROM [' + o.[name] + ']
WHERE [' + c.[name] + '] IS NULL AND c.[isnullable]=1
HAVING COUNT(*) > 0'
FROM syscolumns c INNER JOIN sysobjects o ON c.[id]=o.[id]
WHERE o.[name]='[mytablename]'
此查询使用 sysobjects 和 syscolumns 表。它针对[mytablename]表中的每一列返回带有“ SELECT”查询的结果集。将结果复制到新窗口并执行-您将获得每个表/列的空计数。
但是请谨慎使用-如果表很大,那么这些查询可能会导致严重的性能问题(我假设您在每一列上都没有索引,因此您基本上是在进行巨大的表扫描)。
编辑-添加了快速检查,以便我们仅在结果集中看到NULLABLE值。