如何在SQL Server中的表的所有列中选择具有空值的行?

时间:2016-04-08 17:47:57

标签: sql-server

我不想把所有列都放在:

select * 
from tbl_AllTransactiondata 
where column1='' and  column2=''  

请提供简短的帮助,因为大约有16列。

我需要在SQL Server的所有列中获取所有具有空数据的行。

3 个答案:

答案 0 :(得分:3)

有趣的问题。我刚学到了一些东西。您可以使用CHECKSUM()。试试这个:

CREATE TABLE #tmp (
 col1 varchar(31) 
,col2 varchar(31)
);

INSERT INTO #tmp (col1,col2) VALUES ('','');

SELECT COUNT(*)
FROM #tmp
WHERE CHECKSUM(*)=CHECKSUM('');

DROP TABLE #tmp;

返回1的结果。

因此,如果您从表WHERE CHECKSUM(*)=CHECKSUM('')执行SELECT,它将返回所有列为空字符串的所有行。

答案 1 :(得分:2)

一种可能的解决方案是使用动态查询,如果您不想对字段名称进行硬编码

DECLARE @sqlStr VARCHAR(max) = (
        SELECT stuff((
                    SELECT 'and ' + c.NAME + ' is null '
                    FROM sys.columns c
                    WHERE object_name(object_id) = 'yourtablename'
                    ORDER BY c.NAME
                    FOR XML PATH('')
                    ), 1, 3, '')
        )

SET @sqlStr = 'select * from ' + yourtablename + ' where ' + @sqlStr

PRINT @sqlStr

EXEC (@sqlStr)

请"标记为答案"如果帖子已回答问题

答案 2 :(得分:-1)

我尝试了下面的查询,它工作正常

SELECT *
FROM tbl_AllTransactiondata
WHERE COALESCE(column1, column2, column3, column4, column5, column6, column7,
               column8, column9, column10, column11, column12, column13,
               column14, column15, column16) =''