Я искал то же самое и не думаю, что это возможно.
Кажется, единственное достойное решение - назвать их от Bytes.com :
SELECT
CASE WHEN patientid IS NULL THEN 1 ELSE 0 END+
CASE WHEN age IS NULL THEN 1 ELSE 0 END+
CASE WHEN weight IS NULL THEN 1 ELSE 0 END+
CASE WHEN height IS NULL THEN 1 ELSE 0 END+
CASE WHEN race IS NULL THEN 1 ELSE 0 END
FROM tblPatientDemographics
Конечно, это не весело, поэтому я написал динамический SQL, чтобы сделать это для меня. Вряд ли элегантно, но я не уверен, что есть лучший способ.
DECLARE @tableName SYSNAME
DECLARE @sql VARCHAR(MAX)
DECLARE @sqltail VARCHAR(MAX)
-- loop through all the fields in a table.
DECLARE @colName SYSNAME
SET @tableName = 'YourTableName'
DECLARE crsCol CURSOR FORWARD_ONLY READ_ONLY
FOR
SELECT name
FROM syscolumns
WHERE id = OBJECT_ID(@tableName)
ORDER BY colid
OPEN crsCol
SET @sql = ''
SET @sqltail = 'FROM [' + @tableName + ']'
FETCH NEXT FROM crsCol INTO @colName
WHILE @@FETCH_STATUS = 0
BEGIN
IF @sql = ''
SET @sql = 'SELECT /* Add Your PK Fields here, */ NullCount = '
ELSE
SET @sql = @sql + '+ '
SET @sql = @sql + 'CASE WHEN [' + @colName + '] IS NULL THEN 1 ELSE 0 END '
FETCH NEXT FROM crsCol INTO @colName
END
CLOSE crsCol
DEALLOCATE crsCol
PRINT (@sql + @sqltail)
EXEC(@sql + @sqltail)