有没有一种快速检查ANY列是否为空的方法?

有没有一种快速检查ANY列是否为空的方法?

问题描述:

我有一个大约20列的表。除了打字:有没有一种快速检查ANY列是否为空的方法?

Where column1 is null OR column2 is null OR column3 is null etc... 

有没有更快的方法只是检查每一个栏,看看是否有值为空,如果是,返回记录?

+5

更快地编写或更快地执行? – 2012-03-14 19:51:34

不可以。有很多方法可以更快地编写代码,但没有像您所暗示的那样的快捷方式。采取从an answer I gave on dba.stackexchange

DECLARE @tb NVARCHAR(255), @sql NVARCHAR(MAX); 

SET @tb = N'dbo.[table]'; 

SET @sql = N'SELECT * FROM ' + @tb + ' WHERE 1 = 0'; 

SELECT @sql = @sql + N' OR ' + QUOTENAME(name) + ' IS NULL' 
    FROM sys.columns 
    WHERE [object_id] = OBJECT_ID(@tb); 

EXEC sp_executesql @sql; 
+0

在SQL Server 2005中不起作用,但希望OP能知道该怎么做。 – 2012-03-14 21:58:07

+0

@Andriy谢谢。纠正。我时刻都在盯着自己,有时候我会想念它。在这种情况下,我从2008年的问题中复制出来。 – 2012-03-14 21:59:03

+0

欢迎您。 :) – 2012-03-14 22:07:38

这取决于更快的手段。

如果您的意思是更快执行SQL Server,您可以执行的一项操作是编写触发器,而不是更新指定整行(除了位和主键)是否为NULL的位列。但是,应该有一个真正的好理由,因为它会影响你的更新性能。这些列上的索引也会有帮助。

如果你的意思是写得更快,你可以让SQL为你生成where子句。但是,除非你这么做,否则我认为这是不值得的。

教学对鱼让 - 你 - 的鱼INSTEAD-OF-这样回答的位置:做的

一种方式是通过创建一个存储过程,组装和运行动态查询。

存储过程将:

  • 具有表名称作为输入参数。
  • 查询特定表结构的元数据系统表。
  • 动态汇编一个字符串(实际查询)和该表的列的OR语句。
  • 运行已组装的查询并返回结果。

您可以使用像这样找到的列名:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = <table_name> 

然后,我会写使用这个程序,这将通过在表中的项目和列名循环。

来源:http://codesnippets.joyent.com/posts/show/337