我不想把所有列都放在:
select *
from tbl_AllTransactiondata
where column1='' and column2=''
请提供简短的帮助,因为大约有16列。
我需要在SQL Server的所有列中获取所有具有空数据的行。
答案 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) =''