2009-04-09 8 views
1

テーブルのすべてのフィールドでNULL項目の割合を調べようとしています。私は数トンのフィールドを持ついくつかのテーブルでこれを実行しなければなりませんでした。私はこれを行うための自動化された方法を探していました。システムテーブルを使用して、さまざまなテーブルでNULLの割合をNULLにカウントする

私は「information_schema.columns」を照会およびAlaフィールド名の素敵なきれいなリストを取得することができます知っている:

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

しかし、私はパーセンテージを行うために迅速かつ汚い何かを思い付くように見えることはできません各フィールドのカウント、私はいくつかの並べ替えのいくつかの動的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) 

パーセンテージまでは、それがテーブル全体または特定の列のみであるかどうかはわかりませんでしたので、読者の練習として残しておきます。

関連する問題