2017-10-05 10 views
0

私は2つのデータトリガーを持っています。アップデートの後にもう1つ起動します。AFTER UPDATEトリガーが発生しました。

USE [Database] 
    GO 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    ALTER TRIGGER [dbo].[UpdateTrigger] 
    ON [dbo].[Table1] 
    AFTER UPDATE 
    AS 
    BEGIN 
    (...) 

挿入トリガーが離れて挿入した後の代わりに、更新後にありますことから、まったく同じに見えた後、ザ・:これは、更新トリガーの始まりがどのように見えるかです。 Table1を更新すると、更新トリガーのみが起動されます。しかし、挿入すると、両方のトリガーが起動します。どうして?どうすれば解決できますか?

+0

両方のトリガーでコードを見ることなく、ここで何が起こっているのか判断できません。 –

+0

説明していることはできません。トリガがAFTER UPDATEとして定義されている場合、INSERTの後にトリガされません。トリガーのコードを共有できますか? –

+0

挿入トリガーが同じテーブルを更新すると仮定すると、そのアクションによって更新トリガーが実行されます。また、実際にコードをデバッグすることなく、挿入されたトリガーの効果を確認することなく、更新トリガーの影響を観察することもできます。おそらく、更新トリガが挿入トリガの効果を上書きするでしょうか? – SMor

答えて

0

トリガーが起動すると、2つの仮想テーブルDELETEDとINSERTEDがあります。レコードを挿入すると、レコードはINSERTEDテーブルのみになりますが、レコードを更新すると、古いレコードがDELETEDテーブルにあり、新しいレコードがINSERTEDテーブルにあります。したがって、基本的にUPDATEを実行すると、DELETEとINSERTが実行されます。 DELETEDテーブルにレコードがあるかどうかを確認することで、簡単に解決できます。それがあった場合はUPDATE、存在しない場合はINSERTでした。

+0

次のコマンドを使用して、DELETEDにレコードがあるかどうかを確認しようとしました。IF EXISTS(SELECT * FROM DELETED)が挿入されていてもtrueを返しました。私は間違った構文を使用していますか? – JerryBox

+0

構文上の問題があるのか​​どうかわかりませんが、挿入後にレコードがDELETEDテーブルにあるとすれば、何かが間違っています。 –

+0

挿入と更新の両方に1つのトリガーを作成できます。 INSERT、UPDATE後にxxxを作成します。 –

関連する問題