Sql-Server
測試是否有任何列為 NULL
我試圖找出一個簡單的查詢,我可以測試一個大表是否有一個條目列表,在任何列中至少有一個空白(NULL/空)值。
我需要類似的東西
SELECT * FROM table AS t WHERE ANY(t.* IS NULL)
我不想做
SELECT * FROM table AS t WHERE t.c1 = NULL OR t.c2 = NULL OR t.c3 = NULL
這將是一個巨大的查詢。
@db2 的答案的擴展,更少(讀取:零)手動爭吵:
DECLARE @tb nvarchar(512) = N'dbo.[table]'; DECLARE @sql nvarchar(max) = N'SELECT * FROM ' + @tb + N' WHERE 1 = 0'; SELECT @sql += N' OR ' + QUOTENAME(name) + N' IS NULL' FROM sys.columns WHERE [object_id] = OBJECT_ID(@tb) AND is_nullable = 1; EXEC sys.sp_executesql @sql;
您應該按照 JNK 的評論列出所有列。
WHERE c1 IS NULL OR c2 IS NULL OR c3 IS NULL
下面是一種避免這種情況的效率較低的方法。
;WITH xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' AS ns) SELECT * FROM YourTable AS T1 WHERE ( SELECT T1.* FOR XML PATH('row'), ELEMENTS XSINIL, TYPE ).exist('//*/@ns:nil') = 1