有没有快速的方法来检查任何列是否为NULL?

时间:2012-03-14 15:54:07

标签: sql sql-server sql-server-2005 tsql

我有一张大约20列的表格。除了打字:

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

是否有更快捷的方法来检查每一列并查看是否有任何值为空,如果是,则返回该记录?

4 个答案:

答案 0 :(得分:6)

没有。有一些方法可以更快地编码,但没有像你暗示的快捷方式。取自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;

答案 1 :(得分:3)

您可以使用以下内容找到列名称:

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

然后,我会用这个编写一个程序,然后循环遍历表中的条目和列名。

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

答案 2 :(得分:0)

这取决于更快的意思。

如果您的SQL Server执行速度更快,您可以做的一件事就是编写一个触发器而不是更新一个位列,该列指定整行(除了位和主键除外)是否为NULL。但是,应该有一个很好的理由,因为它会影响您的更新性能。这些列的索引也有帮助。

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

答案 3 :(得分:0)

在这里教授鱼而不是给你鱼类的答案:

这样做的一种方法是创建一个存储过程来组装和运行动态查询。

存储过程将:

  • 将表名作为输入参数。
  • 查询元数据系统表中的特定表结构。
  • 使用该表列的OR语句动态组合字符串(实际查询)。
  • 运行已组装的查询并返回结果。