Использование системных таблиц для подсчета нулевого процента строк в различных таблицах - PullRequest
1 голос
/ 10 апреля 2009

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

Я знаю, что могу запросить "information_schema.columns" и получить хороший чистый список имен полей ala:

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

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

Ответы [ 2 ]

2 голосов
/ 10 апреля 2009

Может быть, слишком упрощенно, но основная идея может быть расширена различными способами (у меня обычно есть переменные для @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)

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

0 голосов
/ 10 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...