Sql-Server

測試是否有任何列為 NULL

  • August 17, 2021

我試圖找出一個簡單的查詢,我可以測試一個大表是否有一個條目列表,在任何列中至少有一個空白(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 

(基於this SO answer)

引用自:https://dba.stackexchange.com/questions/14864