Search code examples
sqlsql-serversql-server-2005nullcorrelated-subquery

Find All Rows With Null Value(s) in Any Column


I'm trying to create a query that will return all the rows that have a null value across all but 1 column. Some rows will have more than one null entry somewhere. There is one column I will want to exclude, because at this moment in time all of the entries are null and it is the only column that is allowed to have null values. I am stuck because I don't know how to include all of the columns in the WHERE.

SELECT *
FROM Analytics
WHERE * IS NULL

Alternatively, I can do a count for one column, but the table has about 67 columns.

SELECT COUNT(*)
FROM Analytics
WHERE P_Id IS NULL

Solution

  • In SQL Server you can borrow the idea from this answer

    ;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
    

    SQL Fiddle

    Likely constructing a query with 67 columns will be more efficient but it saves some typing or need for dynamic SQL to generate it.