是否可以浏览数据库中的选定表并找出这些表中缺少的列?

时间:2018-08-24 15:58:08

标签: sql-server

我正在寻找一种方法来扫描数据库中的所有表(或数据库中的选定表),并找出这些表的列中缺少的值(空值或空值)?有人可以告诉我这是否可行吗?如果是这样,查询将如何显示

1 个答案:

答案 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值。