我有一张大约20列的表格。除了打字:
Where column1 is null OR column2 is null OR column3 is null etc...
是否有更快捷的方法来检查每一列并查看是否有任何值为空,如果是,则返回该记录?
答案 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>
然后,我会用这个编写一个程序,然后循环遍历表中的条目和列名。
答案 2 :(得分:0)
这取决于更快的意思。
如果您的SQL Server执行速度更快,您可以做的一件事就是编写一个触发器而不是更新一个位列,该列指定整行(除了位和主键除外)是否为NULL。但是,应该有一个很好的理由,因为它会影响您的更新性能。这些列的索引也有帮助。
如果你的意思更快,你可以让SQL为你生成where子句。但是,除非你这么做,否则我觉得不值得花时间。
答案 3 :(得分:0)
在这里教授鱼而不是给你鱼类的答案:
这样做的一种方法是创建一个存储过程来组装和运行动态查询。
存储过程将:
OR
语句动态组合字符串(实际查询)。