0

テーブルABCとテーブルXYZがあるとします。

Columns of ABC-->col1 col2 col3 col4 ......coln
Columns of XYZ-->colname oldvalue newvalue modifieddate

したがって、列、たとえばcol1がABCで更新された場合、XYZが、変更される列の名前、その列の古い値、列の新しい値、および変更日。したがって、ABCで変更されたすべての列について、XYZでレコードを取得する必要があります。誰かがこれから始めるのを手伝ってくれますか、最初に可能ですか、提案は大歓迎です、ありがとう

4

2 に答える 2

1

トリガーについて質問しました。

あなたは私たちがあなたのためにすべてのコードを構築することを期待することはできません。

私はあなたの最後の質問で私がしたことを正確に行い、あなたを正しい方向に向けます。

列が更新されたかどうかを知るには、UPDATE(column)キーワードを使用できます

create trigger logUpdate
on ABC
After update
as
begin
  if (update(col1)) begin
    --will only get in here if the col1 was referenced on the update statment
     insert into XYZ based ont INSERTED and DELETED tables
  end
end

編集:代替:CDC

于 2012-05-18T09:59:42.673 に答える
1

トリガーでは、各列に次のように記述します。

Select 'Col1' ColumnName, i.Col1 NewValue, d.Col1 OldValue
From Inserted i 
    Inner Join Deleted d On i.IDCol = d.IDCol
Where 
    (i.Col1 Is Null and Not d.Col1 is Null)
    OR (Not i.Col1 Is Null and d.Col1 is Null)
    OR (Not i.Col1 is Null And Not d.Col1 Is Null AND i.Col1 != d.Col1)

この場合、1つのステートメントで多くの行が更新されるかどうかが考慮され、データが変更された場合にのみ変更がログに記録されます。

NULL列がない場合は簡単です。また、データ型も考慮する必要があります。

于 2012-05-18T10:17:29.250 に答える