我正在尝试对表执行检查,对于每一行,我想查看列中是否有空,并在此处添加1:
SELECT
((CASE WHEN col1 IS NULL THEN 1 ELSE 0 END)
+ (CASE WHEN col2 IS NULL THEN 1 ELSE 0 END)
+ (CASE WHEN col3 IS NULL THEN 1 ELSE 0 END)
...
...
+ (CASE WHEN col10 IS NULL THEN 1 ELSE 0 END)) AS sum_of_nulls
FROM table
WHERE Customer=some_cust_id'
此方法以静态方式执行其应有的操作,但是可以基于表动态构建列,而不是写出每个case语句。
非常感谢!
答案 0 :(得分:0)
这就是我提出的
declare
@sql nvarchar(max),
@columns nvarchar(max),
@table nvarchar(128) = '<your table here>'
select
@columns = stuff((select '+case when ' + quotename(column_name) + ' is null then 1 else 0 end'
from information_schema.columns
where table_name = @table
order by ordinal_position
for xml path('')), 1, 1, ''),
@sql = 'select sum_of_nulls = ' + @columns + ', *
from dbo.' + quotename(@table)
exec sp_executesql @sql
如果需要,您可以在表名后插入where
子句。现在,它只返回表中的所有内容。