在任意列中查找具有空值的所有行

Sna*_*ken 17 sql sql-server null sql-server-2005 correlated-subquery

我正在尝试创建一个查询,该查询将返回除1列之外的所有具有空值的行.某些行在某处会有多个空条目.我想要排除一列,因为此时所有条目都为空,并且它是唯一允许具有空值的列.我被困了,因为我不知道如何在WHERE中包含所有列.

SELECT *
FROM Analytics
WHERE * IS NULL
Run Code Online (Sandbox Code Playgroud)

或者,我可以对一列进行计数,但该表有大约67列.

SELECT COUNT(*)
FROM Analytics
WHERE P_Id IS NULL
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 12

在SQL Server中,您可以从这个答案借用这个想法

;WITH XMLNAMESPACES('http://www.w3.org/2001/XMLSchema-instance' as ns)
SELECT *
FROM   Analytics
WHERE  (SELECT Analytics.*
        FOR xml path('row'), elements xsinil, type
        ).value('count(//*[local-name() != "colToIgnore"]/@ns:nil)', 'int') > 0
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

可能使用67列构建查询会更有效,但它可以节省一些输入或需要动态SQL来生成它.