【问题标题】:No null values in any column in SQL ServerSQL Server 的任何列中都没有空值
【发布时间】:2017-08-16 20:23:47
【问题描述】:

我的表中有超过 100 列,并且所有列都可以为空。我们需要找出哪一列没有空值。这是在 SQL Server 中。

【问题讨论】:

标签: sql sql-server-2008


【解决方案1】:

应该这样做

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')

确保将“my_test_table”的名称更改为表名。

结果

total   | foo1_total  |foo2_total    |foo3_total   |foo4_total   |foo5_total
--------+-------------+--------------+-------------+-------------+-----------
4       |  4          | 3            | 3           | 4           | 2

如果列总数与总数(第一列)不匹配,则它有一些 NULL。

测试:http://rextester.com/AVB29103

【讨论】:

    【解决方案2】:
    1. 运行此查询sp_help Your_Table,它将为您提供列名列表
    2. 打开Excel,将100个列名全部粘贴到A列,将这段代码写到B列:

      ="count("&A1&") '"&A1&"'," 然后将您的查询插入回 SQL。

    用 100 列这样的列编写您的查询

    select 
    count(ID) 'ID',
    ...
    count(Address) 'Address'
    from Your_Table
    
    1. 不会计算空值,因此如果您有 count()>0 表示您在该列有值,那么您可以继续您的任务。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2017-05-09
      • 2013-08-11
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多