Let’s assume a table has more than 100 columns and I want to display all the rows when all of its columns (Col1, Col2, …, ColN) are nulls except for the column(s) I mentioned (PK).
This is just a sample table I created to illustrate this question.
Sample Table with data
| PK | Col1 | Col2 | Col3 | Col4 | 
|---|---|---|---|---|
| 1 | 45 | 12 | 171 | 15 | 
| 2 | 13 | NULL | 15 | NULL | 
| 3 | 17 | 14 | 130 | NULL | 
| 4 | 10 | 11 | 110 | 12 | 
| 5 | 45 | 15 | 185 | 54 | 
| 6 | NULL | NULL | NULL | NULL | 
| 7 | 16 | 48 | NULL | 25 | 
| 8 | NULL | NULL | NULL | NULL | 
| 9 | 13 | 45 | 41 | 64 | 
| 10 | NULL | NULL | NULL | NULL | 
| 11 | 21 | 12 | 165 | 56 | 
| 12 | NULL | NULL | NULL | NULL | 
In this case, the rows 6, 8, 10 and 12 (Column name: PK) are the result I want to see since all of the columns (Col1 to Col4) are null except for the PK column.
| PK | Col1 | Col2 | Col3 | Col4 | 
|---|---|---|---|---|
| 6 | NULL | NULL | NULL | NULL | 
| 8 | NULL | NULL | NULL | NULL | 
| 10 | NULL | NULL | NULL | NULL | 
| 12 | NULL | NULL | NULL | NULL | 
The typical way to do this is to write a query like this.
SELECT * FROM TableName WHERE COALESCE(Col1, Col2, Col3, Col4) is null
If the above table has more 100 columns as I said, writing this query will be hard especially if you have to do it often.
Therefore, I have created a query like this.
DECLARE @query NVARCHAR(MAX);
SELECT @query = ISNULL(@query+', ','') + [name] 
                FROM  sys.columns 
                WHERE object_id = OBJECT_ID('TableName') 
                AND  [name] != 'PK';
SET @query = N'SELECT * FROM TableName WHERE COALESCE('+ @query +') IS NULL';
EXECUTE(@query)
Does this SQL code follow common best practices? How is the quality of this code? (Ex: Performance)



