如何在存在空值的表中返回列名?

时间:2013-07-12 14:17:26

标签: sql

我有一个超过200万行和超过100列的表。我需要运行一个查询,检查表的任何行或列中是否有任何空值,并返回一个空值的ID号。我想过要做以下几点,但我想知道是否有更简洁的方法来检查这个?

SELECT [ID]
from [TABLE_NAME]
where
   [COLUMN_1] is null
or [COLUMN_2] is null
or [COLUMN_3] is null or etc.

2 个答案:

答案 0 :(得分:4)

你的方法很好。如果您的挑战是写出where语句,那么您可以运行如下查询:

select column_name+' is null or '
from information_schema.columns c
where c.table_name = 'table_name'

然后将结果复制到查询窗口并使用它们构建查询。

我使用SQL Server语法进行查询,因为它看起来像是在使用SQL Server。大多数数据库都支持INFORMATION_SCHEMA表,但字符串连接的语法因数据库而异。请务必在上次比较结束时删除最终or

您还可以将列列表复制到Excel中,并使用Excel公式创建列表。

答案 1 :(得分:2)

您可以使用类似于以下内容的内容:

declare @T table
(
  ID int,
  Name varchar(10),
  Age int,
  City varchar(10),
  Zip varchar(10)
)  

insert into @T values 
(1, 'Alex', 32, 'Miami', NULL),
(2,  NULL,  24,  NULL,   NULL)

;with xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns)
select ID,
       (
          select *
          from @T as T2
          where T1.ID = T2.ID
          for xml path('row'), elements xsinil, type 
       ).value('count(/row/*[@ns:nil = "true"])', 'int') as NullCount
from @T as T1