Запрос SQL Server для возврата процента от нулевого содержимого в полях таблицы - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь очистить данные в проекте миграции из устаревшей системы, разработанной на SQL Server 2005, но первым делом стоит выяснить, какие столбцы на самом деле не используются.

Общая логика моего подхода состоит в том, чтобы идентифицировать столбцы, которые в основном оставлены пустыми (то есть большинство или все строки содержат нулевые значения для этого столбца в этой таблице). Это будет выполнено как хранимая процедура, где идеальный вывод будет выглядеть примерно так:

TABLE: contacts (10000 records)
---------------------------------
FIELD: id | 0 (0%) Null Records
FIELD: username | 0 (0%) Null Records
FIELD: phonenumber | 8,200 (82%) Null Records
FIELD: email | 300 (3%) Null records
FIELD: icq | 9,900 (99%) Null Records
FIELD: zip | 100 (1%) Null Records

Вот подвох: в некоторых таблицах более 100 столбцов, поэтому реальный ключ - процедура для циклического перебора столбцов данной таблицы, поэтому мне не нужно вводить длинную строку имен столбцов для запуска запрос. Любая помощь о том, как это сделать, будет великолепна,

Спасибо.

1 Ответ

3 голосов
/ 11 января 2012

Вы можете использовать метаданные столбца для создания некоторых запросов, таких как:

select 'select ''' + table_name + ''' table_name, ''' 
+ column_name + ''' column_name, count(*) nullcount '
+ 'from [' + table_name + '] where [' + column_name + '] is null '
from information_schema.columns

Если вы запустите запрос выше, вы получите список выбранных запросов. Скопируйте вставить в текстовый редактор и вставьте «объединить все» между выборами, это будет выглядеть так:

select 'companies' table_name, 'id' column_name, count(*) nullcount from [companies] where [id] is null 
union all
select 'companies' table_name, 'code' column_name, count(*) nullcount from [companies] where [code] is null 
union all
...

Затем запустите эти объединенные выборки.

Для списка таблиц вы можете использовать тот же трюк с метаданными в information_schema.tables.

Затем объедините два списка в Excel с помощью vlookup или создайте более сложные запросы с подзапросами, используя information_schema.tables и information_schema.columns.

...