2016-07-01 13 views
0

どのケース/条件に基づいてもテーブルのカラム値を取得できる動的SQLクエリが必要です。私はレコードを更新しながらそれをしたい。そして私はcolumnの値を更新する必要があり、SQL ServerのInsertedテーブルとDeletedテーブルを使用しています。テーブルのすべての更新されたカラムを見つけるためのsqlクエリ

1つの列で正常に動作しているクエリを1つ作成しましたが、すべての列で機能する汎用クエリが必要です。

SELECT i.name 
FROM inserted i 
INNER JOIN deleted d ON i.id = d.id 
WHERE d.name <> i.name 

上記のクエリの助けを借りて、更新された場合は「名前」列の値を取得できます。しかし、1つのカラムに特有のことですが、カラム名を定義する必要がないテーブルのすべてのカラムに対して同じことをしたいので、それはジェネリック/ダイナミッククエリでなければなりません。

私は列の "INFORMATION_SCHEMA.COLUMNS"のPIVOTでもう1つの内部結合を追加することでこれを達成しようとしていますが、私たちがこれを行うかどうかはわかりません。

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME LIKE '%table1%' 
+0

は 'columns_updated'機能についてhttps://msdn.microsoft.com/en-us/library/ms186329.aspxを読みます。私はこれがあなたが探しているものだと思います。 –

答えて

0

クエリだけでは、そのような情報を取得することはできません。更新トリガーを実行する必要があるようです。そこにあなたの基準をコード化することができますあなたの列などを取得することができますあなたの質問から、それは1つだけの列を更新することができるように聞こえる、あなたはそれがどれになるか分からない。複数の列が更新されている場合、それは複雑ですが、それほど複雑ではありません。

必要なデータを取得する方法はいくつかあります。一番上から、列名を取得すると、簡単なループをすることをお勧めします。

同様のシナリオで私にとってうまくいったことは、INFORMAATION_SCHEMA.Columnsに対して簡単なクエリを実行し、その結果をテーブル変数に入れることです。そこから、テーブル変数を繰り返して一度に1つの列名を取得し、単純な動的クエリを実行して値が変更されたかどうかを確認します。

これが役に立ちます。

:{)

+0

#ジョン、はい、私たちはあなたの提案のようにそれを行うことができます。しかし、膨大な数のカラムの場合、パフォーマンスが低下します。そのため、私はより少ない時間で(結合などの)できるような方法を探しています。 – GreenSoft

関連する問題