0

SQLServer2012を使用しています

と呼ばれるテーブルとAMOUNTSと呼ばれるテーブルがありますAMOUNTS_HIST

両方のテーブルには同じ列があります。

  1. 変更日
  2. COMPANY_ID
  3. EXP_ID
  4. スポット
  5. UPDATE_DATE[システム日付]

の主キーAMOUNTSはCOMPANY_IDとEXP_IDです。主キーpfAMOUNTS_HISTは、COMPANY_ID、EXP_ID、およびCHANGE_DATEです。

テーブルに行を追加するときはいつでも、AMOUNTSそのコピーをテーブルに作成したいと思いAMOUNTS_HISTます。[理論的には、「AMOUNTS」に行が追加されるたびに、COMPANY_ID、EXP_ID、CHANGE_DATEは一意になります。実際には、そうでない場合は、AMOUNTS_HISTの関連する行をオーバーライドする必要があります。以下のコードは、オーバーライドを考慮していません。]

次のようにトリガーを作成しました。

CREATE TRIGGER [MYDB].[update_history] ON [MYDB].[AMOUNTS]
FOR UPDATE
AS
INSERT MYDB.AMOUNTS_HIST (
    CHANGE_DATE,
    COMPANY_ID,
    EXP_ID,
    SPOT
    UPDATE_DATE
    )
SELECT e.CHANGE_DATE,
    e.COMPANY_ID,
    e.EXP_ID
    e.REMARKS,
    e.SPOT,
    e.UPDATE_DATE
FROM MYDB.AMOUNTS e
JOIN inserted ON inserted.company_id = e.company_id
    AND inserted.exp_id=e.exp_id

なぜそれが私のAMOUNTS_HISTテーブルでまったく何もしないのか理解できません。誰か助けてもらえますか?

ありがとう、

4

2 に答える 2

2

おそらく、トリガーは、現在書かれている方法で、挿入ではなく、更新が行われたときにのみ起動されるためです。

次のように変更してみてください。

CREATE TRIGGER [MYDB].[update_history] ON [MYDB].[AMOUNTS]
FOR UPDATE, INSERT
于 2012-07-11T17:31:20.940 に答える
1

チャイムを鳴らしたかっただけです。CDC(変更データキャプチャ)を見たことがありますか。

http://msdn.microsoft.com/en-us/library/bb522489(v=sql.105).aspx "変更データのキャプチャは、SQL Serverテーブルに適用される挿入、更新、および削除のアクティビティをキャプチャし、簡単に利用できるリレーショナル形式で利用可能な変更の詳細。変更データキャプチャで使用される変更テーブルには、追跡されたソーステーブルの列構造を反映する列と、発生した変更を理解するために必要なメタデータが含まれます。

変更データのキャプチャは、SQL ServerのEnterpriseエディション、Developerエディション、およびEvaluationエディションでのみ使用できます。」

トリガーに関する限り、[MYDB]。[AMOUNTS]を更新すると、トリガーはエラーをスローしますか?

また、mydb.amountsに結合し直す必要なしに、挿入されたテーブルからすべてのデータを取得できると思います。

于 2012-07-11T17:33:32.370 に答える