2017-05-05 18 views
0

テーブルに変更がある場合、新しいレコードを挿入する比較的簡単な挿入ステートメントを作成します。私が持っている問題は、チェックする必要がある600以上の列があるということです。再帰的なステートメントSQL Server 2016

詳細:メインレポートテーブルは、SQLプロセスを使用して変更をプッシュするフロントエンドアプリケーションから15分ごとに更新されますが、データは上書きされ、変更ログは維持されません。私はこれを支配しません。

第2のテーブル(myテーブル)は、変更の監査を作成するDWHテーブルです。だから、t1.AccountNo = t2.AccountNo and t1.Field1 <> t.2Field1がORを追加し、次のフィールドt1.AccountNo = t2.AccountNo and t1.Field2 <> t.2Field2を追加する内部結合を使用します。

カラムの数があれば、望ましい結果を得るためのより良い方法はありますか?

答えて

1

あなたは別の方法を試すことができます。

更新と削除のためにメインテーブルにトリガを作成します。 このトリガは、データが変更される前に、すでにテーブルにあるデータをdwhテーブルにコピーします。削除

create Trigger [namedelete] on [yourtable] after delete 
[...] 

私のDWHテーブルの

create Trigger [nameupdate] on [yourtable] after update 
as 
insert into [dwh] 
select 
     getdate() as [ChangeDate] 
     ,'update' as [Action] 
     ,SYSTEM_USER as [User] 
     ,d.[ID] 
     ,d.[...] 
from deleted d 
GO 

同じトラッキングのための3つの追加の列があり、メインテーブルからすべての列が含まれています。前方の良い方法かもしれない

CREATE TABLE [dwh](
    [ID] [int] IDENTITY(1,1) NOT NULL Primary key, 
    [ChangeDate] [datetime] NOT NULL, 
    [Action] [varchar](50) NOT NULL, 
    [User] [nvarchar](128) NOT NULL, 
    [...] 
+0

、それとの唯一の問題は、それが毎晩再びすべてのデータを作成しますので..私は同様に挿入トリガーを行う必要があるだろうが、データは毎晩再構築です。特定の時間にのみ実行するようにトリガーをスケジュールできますか? – GPH

+0

私を無視してください。あなたはできる!これは完璧です – GPH

+0

また、呪いの挿入トリガーを作成することもできます。新しい(挿入されたテーブル)と古いデータ(削除されたテーブル)は、すべてのトリガーで比較できます。 dwhテーブルと比較することもできます。それはトリガの挿入SQLの魔法です。 –

関連する問題