T-SQL动态行检查

时间:2017-01-27 23:19:13

标签: sql sql-server dynamic

我正在尝试对表执行检查,对于每一行,我想查看列中是否有空,并在此处添加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语句。

非常感谢!

1 个答案:

答案 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子句。现在,它只返回表中的所有内容。