计算每列中的空值数

时间:2012-10-22 18:52:30

标签: sql

我遇到了一个包含过宽表格的数据库。 (600+列)即使要求没有参数的前100行也需要4秒。我想把这些桌子缩小一点。

要确定哪些列最容易移动到新表或完全删除,我想知道每列中有多少空值。这应该告诉我哪些信息可能最不重要。

如何编写可以查找所有列并计算这些列中的空值的查询?

编辑数据库是SQL Server 2008.我真的 希望不要单独键入每个列。貌似sys.columns可以帮助解决这个问题吗?

Edit2 这些列都是不同的类型。

2 个答案:

答案 0 :(得分:6)

试试这个

declare @Table_Name nvarchar(max), @Columns nvarchar(max), @stmt nvarchar(max)

declare table_cursor cursor local fast_forward for
    select
        s.name,
        stuff(
            (
                select
                    ', count(case when ' + name + 
                    ' is null then 1 else null end) as count_' + name
                from sys.columns as c
                where c.object_id = s.object_id
                for xml path(''), type
            ).value('data(.)', 'nvarchar(max)')
        , 1, 2, '')
    from sys.tables as s

open table_cursor
fetch table_cursor into @Table_Name, @Columns

while @@FETCH_STATUS = 0
begin
    select @stmt = 'select ''' + @Table_Name + ''' as Table_Name, ' + @Columns + ' from ' + @Table_Name

    exec sp_executesql
        @stmt = @stmt

    fetch table_cursor into @Table_Name, @Columns
end

close table_cursor
deallocate table_cursor

答案 1 :(得分:2)

select count(case when Column1 is null then 1 end) as Column1NullCount,
    count(case when Column2 is null then 1 end) as Column2NullCount,
    count(case when Column3 is null then 1 end) as Column3NullCount,
    ...
from MyTable