0

Я ищу для очистки данных в проекте миграции из унаследованной системы, разработанной на SQL Server 2005, но первый порядок бизнеса - выяснить, какие столбцы aren ' t действительно используется.Запрос SQL Server для возврата процента нулевого содержимого в полях таблицы

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

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

'SELECT * FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS' –

ответ

2

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

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 
... 

Затем запустите эти unioned выбирает.

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

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

+0

Отлично - большое спасибо. – Yaaqov