2012-03-14 6 views
10

私は約20列のテーブルを持っています。別に出入力から:ANY列がNULLかどうかを確認する簡単な方法はありますか?

Where column1 is null OR column2 is null OR column3 is null etc... 

だけですべての列をチェックして、任意の値がnullであり、もしそうなら、そのレコードを返すかどうかを確認するために迅速な方法はありますか?

+5

実行するのが速く実行するのが早いか? –

答えて

4

いいえ、コードをすばやく作成する方法はありますが、あなたのようなショートカットはありません。 an answer I gave on dba.stackexchangeから:

DECLARE @tb NVARCHAR(255), @sql NVARCHAR(MAX); 

SET @tb = N'dbo.[table]'; 

SET @sql = N'SELECT * FROM ' + @tb + ' WHERE 1 = 0'; 

SELECT @sql = @sql + N' OR ' + QUOTENAME(name) + ' IS NULL' 
    FROM sys.columns 
    WHERE [object_id] = OBJECT_ID(@tb); 

EXEC sp_executesql @sql; 
+0

SQL Server 2005では動作しませんが、OPが何をすべきかを知っていればうれしいことです。 @Andriyありがとう。 –

+0

修正されました。私は常にその1つに自分自身をキャッチし、時々私はそれを逃す。この場合、私は2008年の質問からそれをコピーしました。 –

+0

あなたは大歓迎です。 :) –

0

どのような早い手段が必要ですか。

SQL Serverを実行する方が速い場合は、行全体(ビットと主キー以外)がNULLであるかどうかを指定するビット列を更新よりもトリガで書き込むことができます。しかし、更新のパフォーマンスに影響するため、これには正当な理由があるはずです。これらの列の索引も同様に役立ちます。

書いた方が早い場合は、SQLにwhere句を生成させることができます。しかし、あなたがこれをやらなければ、それは私の意見では時間の価値がありません。ここでの答えの

1

教育・ツー・魚の代わりに-の-与える - あなたは、魚の種類:それを行うの

一つの方法は、組み立ておよび動的なクエリを実行ストアドプロシージャを作成することです。

ストアドプロシージャはます

  • は、入力パラメータとしてテーブル名を有しています。
  • 特定のテーブル構造のメタデータシステムテーブルをクエリします。
  • そのテーブルの列のORステートメントで文字列(実際のクエリ)を動的にアセンブルします。
  • アセンブルされたクエリを実行し、結果を返します。
2

あなたはこのようなものを使用して列名を見つけることができます。

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = <table_name> 

その後、私はこれを使用してプロシージャを記述し、それは希望あなたのテーブルのエントリとカラム名をループ。

ソース:http://codesnippets.joyent.com/posts/show/337

関連する問題