2011-12-13 9 views
1

テーブルAと呼ばれるテーブルがあり、INSERT、UPDATES、DELETESを処理するトリガを作成しました。ここで私の次のステップを処理するために、どのようなDMLアクションが行われたのかを知りたいと思います。更新/挿入/削除が行われたかどうかをどのように知るのですか?更新/挿入/削除がテーブル上で行われたかどうかを知る方法

あなたのご意見、ご感想は大歓迎です!

+0

それとも、可能な解決策だすべてのイベント – Magnus

+0

に1つのトリガーを作成します。私は一度にすべてをやり遂げることができる場所があるのだろうかと思っていました。ベストプラクティスは何ですか? – SaiBand

答えて

2

トリガーの内側には、INSERTEDDELETEDの2つの特別なテーブルがあります。行がINSERTED表にのみ存在する場合は、INSERT操作が発生しました。同様に、行がDELETED表にのみ存在する場合は、DELETE操作が発生しました。行が両方の表に存在する場合、UPDATEが発生し、INSERTED表は新しい値を保持し、一方DELETED表は古い値を保持します。

挿入された行:

SELECT i.* 
    FROM INSERTED i 
     LEFT JOIN DELETED d 
      ON i.PrimaryKey = d.PrimaryKey 
    WHERE d.PrimaryKey IS NULL 

削除された行:

SELECT d.* 
    FROM DELETED d 
     LEFT JOIN INSERTED i 
      ON d.PrimaryKey = i.PrimaryKey 
    WHERE i.PrimaryKey IS NULL 

更新された行:

SELECT * 
    FROM INSERTED i 
     INNER JOIN DELETED d 
      ON i.PrimaryKey = d.PrimaryKey 
+0

お返事ありがとうございます。しかし、私のトリガをコンパイルしようとするとエラーメッセージが表示されます。無効な列PrimaryKey – SaiBand

+1

@SaiBand: 'PrimaryKey'は私の例のために作られた列名でした。テーブルの実際の主キー列の名前を代入する必要があります。 –

+0

ありがとう!これは、主キーをテーブル内の実際のキーに置き換えた後に機能します。乾杯! – SaiBand

関連する問題