0

SQL Server 2005で開発されたレガシーシステムから移行プロジェクトのデータをスクラブしようとしていますが、最初のビジネスは、本当に使用中です。テーブルのフィールドにNULLコンテンツの割合を返すSQL Serverクエリ

私のアプローチの背後にある一般的な論理は、大部分が空白のままである(つまり、大部分またはすべての行に、その表のその列に対してNULL値が含まれている)列を識別することです。

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

を次に、これらのUNION句選択を実行します。

テーブルのリストについては、information_schema.tablesのメタデータと同じトリックを使用できます。

次に、vlookupを使用してexcelで2つのリストを結合するか、またはinformation_schema.tablesとinformation_schema.columnsを使用してサブクエリを使用してより複雑なクエリを作成します。

+0

大変ありがとうございます。 – Yaaqov

関連する問題