2009-04-09 3 views
1

Я пытаюсь определить процент нулевых элементов для всех полей таблицы. Я должен запустить это на нескольких столах с тонны полей, и я искал автоматизированный способ сделать это.Использование системных таблиц для подсчета процентов строк в разных таблицах

Я знаю, что могу запросить «INFORMATION_SCHEMA.COLUMNS» и получить хороший чистый список имен полей ала:

select Column_name 
from information_schema.columns 
where table_name='TableName' 

Но я не могу придумать что-то быстро и грязно, чтобы сделать процент count для каждого поля, я предполагаю, что мне понадобится какой-то динамический sql-файл? У кого-нибудь есть предложение на хороший способ приблизиться к этому?

ответ

0

AFAIK единственный способ сделать это - использовать динамический sql (например, sp_executesql). Есть статистические данные индекса, но обнуляет не сохраняются в индексах ...

2

Может быть слишком упрощенным, но основная идея может быть расширена по-разному (я обычно имеют переменные для @CRLF и @TAB для генерации кода):

DECLARE @sql AS varchar(MAX) 

SELECT @sql = COALESCE(@sql + CHAR(13) + CHAR(10) + 'UNION' + CHAR(13) + CHAR(10), '') 
    + 'SELECT ''' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + '.' + QUOTENAME(COLUMN_NAME) + ''' AS COLUMN_NAME' + CHAR(13) + CHAR(10) 
     + CHAR(9) + ',COUNT(*) AS TotalRows' + CHAR(13) + CHAR(10) 
     + CHAR(9) + ',COUNT(' + COLUMN_NAME + ') AS NonNullCount' + CHAR(13) + CHAR(10) 
    + 'FROM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) 
FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES' 

PRINT @sql 
EXEC (@sql) 

Что касается ваших процентов, я не был уверен, что это было по всей таблице или только одному столбцу, поэтому я оставлю это как упражнение для читателя.

Смежные вопросы