SQL Server中的任何列中都没有空值

SQL Server中的任何列中都没有空值,sql,sql-server-2008,Sql,Sql Server 2008,我的表中有100多列,所有列都可以为空。我们需要找到哪个列中没有空值。这是在SQL Server中实现的 运行此查询sp\u help Your\u Table,它将为您提供列名列表 打开Excel,将所有100个列名称粘贴到一列上,在B列上写入此代码: =“计数('A1&'”&A1&',” 然后将查询插入回SQL 用100列编写查询,如下所示 select count(ID) 'ID', ... count(Address) 'Address' from Your_Table 空值不会被计

我的表中有100多列,所有列都可以为空。我们需要找到哪个列中没有空值。这是在SQL Server中实现的

  • 运行此查询
    sp\u help Your\u Table
    ,它将为您提供列名列表
  • 打开Excel,将所有100个列名称粘贴到一列上,在B列上写入此代码:

    =“计数('A1&'”&A1&',” 然后将查询插入回SQL

  • 用100列编写查询,如下所示

    select 
    count(ID) 'ID',
    ...
    count(Address) 'Address'
    from Your_Table
    
  • 空值不会被计数,因此如果count()>0表示该列有值,则可以继续执行任务 谢谢

    这应该可以

    SET NOCOUNT ON;
    
    -- populate table
    create table my_test_table
    (
        foo1 int,
        foo2 int,
        foo3 int,
        foo4 int,
        foo5 int
    )
    
    INSERT INTO my_test_table
    select 1,2,3,4,5
    
    INSERT INTO my_test_table
    select 1,2,null,4,5
    
    INSERT INTO my_test_table
    select 1,2,3,4,null
    
    INSERT INTO my_test_table
    select 1,null,3,4,null
    
     -- Actual query needed for question
    declare @columns table
    (
        ident int identity(1,1),
        column_name varchar(255)
    )
    
    INSERT INTO @columns (column_name)
        SELECT c.[name] 
        FROM sys.columns c
        INNER JOIN sys.objects o ON (c.object_id = o.object_id)
        WHERE o.[name] = 'my_test_table'
        ORDER BY c.column_id
    
    declare @table_count int = (select COALESCE(count(ident),0) from @columns)
    declare @counter int = 1
    
    declare @column_name varchar(255)
    declare @sql nvarchar(max) = ''
    
    while (@table_count > 0 AND @counter <= @table_count)
    BEGIN
        select @column_name = column_name
        from @columns
        where ident = @counter
    
        set @sql += ', count(' + @column_name + ') as [' + @column_name + '_total]'
    
        set @counter += 1 
    END
    
    exec('select count(*) as total' + @sql + ' from my_test_table')
    
    如果列总计与总计(第一列)不匹配,则它有一些空值


    测试:

    听起来像是一个可怕的DB设计。您可以更改它吗?从dbo中选择COUNT(*)、COUNT(col1)、COUNT(col2)、COUNT(col150)的可能重复项。您的表,并比较哪个结果小于
    COUNT(*)
    不是完全重复项,但您可以通过一些调整得到您想要的答案。
    total   | foo1_total  |foo2_total    |foo3_total   |foo4_total   |foo5_total
    --------+-------------+--------------+-------------+-------------+-----------
    4       |  4          | 3            | 3           | 4           | 2