2016-10-24 3 views
1

シナリオ:同じサーバーに2つのDBがあります。 SRC DBとTGT DBの両方に同じ列名を持つ同じ20の表があります。今日のSRCとTGTのDBが等しい場合、明日はSRCの列の値が更新されます。どのようにSQL Serverを使用してこれらの変更された列名を動的に取得できますか。 私が使用したロジックは以下のように書かれていますが、各テーブルにはハードコードされたソリューションです。私はそれが動的であることを望む。SQL Server 2008で動的に変更された列名を取得

CODE

SELECT DISTINCT PK_COL_NAMES, 
Result = CASE WHEN **a.COL1 != b.COL1 THEN ‘COL1,' ELSE '' END + 
CASE WHEN a. COL2 != b. COL2 THEN 'COL2,' ELSE '' END + 
CASE WHEN a. COLN != b. COLN THEN 'COLN,' ELSE '' END**    
FROM #TEMP b 
     LEFT JOIN #TEMP a 
      ON a.PK_COL1=b.PK_COL1 AND 
a.PK_COL2=b.PK_COL2 

WHERE  **a.COL1 != b.COL1 OR 
a.COL2 != b.COL2 OR 
a.COLN != b.COLN** 

PKCOL - >テーブルから同じ列名ですが、プライマリ

PS:well.Theyがテーブルからテーブルに変わるので、私のテーブルの一つは、周りに98列があります。

+0

[情報スキーマ](https://msdn.microsoft.com/en-GB)に保持されているレコードを結合する方法があります/library/ms186778.aspx)を[動的SQL](https://msdn.microsoft.com/en-us/library/ms709342%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)と置き換えてください。 –

+0

あなたはSQL Server 2008でトラッキングを変更することができますhttps://technet.microsoft.com/en-us/library/cc280462(v=sql.105).aspx –

+0

@ KannanKandasamyはい私は情報スキーマを使ってみました..しかし私は動的に実装することはできません。 –

答えて

0

ddlトリガーを使用しない理由このarticleを見ると、サーバーまたはデータベースのデータ定義の変更を追跡できます

+0

トリガーはすべてのテーブルに個別に適用する必要があるため、変更が発生すると自動的に列が取得されますが、明示的に1つの新しいテーブルがリストに追加される場合はどうなりますか?ここでもトリガーを追加する必要があります。しかし、私はすべてのPK列をキャプチャしたいと思います。それに加えて、私はいくつかのTEMPテーブルに格納される更新された列名を含む別の列が必要です。とりわけ私はTEMPテーブルを取り扱っているので、トリガはそれほど効果的ではありません。私はトリガーを試してみました。 –

+0

見てください[ここ](http://stackoverflow.com/questions/4812412/creating-a-trigger-to-only-run-when-a-new-table-is-being-created)私は話しているデータベーストリガはテーブルトリガではありません – Hadi

関連する問題