正如Paolo所说,但这是一个示例:
DECLARE @TableName VARCHAr(512) = 'invoiceTbl';DECLARE @SQL VARCHAr(1024);WITH SQLText AS ( SELECt ROW_NUMBER() OVER (ORDER BY c.Name) AS RowNum, 'SELECT ''' + c.name + ''', SUM(CASE WHEN ' + c.Name + ' IS NULL THEN 1 ELSE 0 END) AS NullValues FROM ' + @TableName AS SQLRow FROM sys.tables t INNER JOIN sys.columns c ON c.object_id = t.object_id WHERe t.name = @TableName),Recur AS ( SELECt RowNum, ConVERT(VARCHAr(MAX), SQLRow) AS SQLRow FROM SQLText WHERe RowNum = 1 UNIOn ALL SELECt t.RowNum, ConVERT(VARCHAr(MAX), r.SQLRow + ' UNIOn ALL ' + t.SQLRow) FROM SQLText t INNER JOIN Recur r ON t.RowNum = r.RowNum + 1 )SELECt @SQL = SQLRow FROM Recur WHERe RowNum = (SELECt MAX(RowNum) FROM Recur);EXEC(@SQL);



