2016-11-22 5 views
1

SQL Serverのトリガーをデバッグする(リバースエンジニア)必要があります。トリガーはAFTER INSERT, UPDATEトリガーです。トリガの開始時にSQL Serverトリガ:INSERTEDおよびDELETEDは存在しません。それは何ですか?

は、以下のIF句がある:

if not exists(select 1 from inserted) and not exists(select 1 from deleted) 
begin 
    print 'something' 
    return 
end 

コードは、このIFに実行され、テキストsomethingが印刷されます。私は、なぜこれが起こるのだろうか?トリガーをトリガーするそれぞれのテーブルにUPDATEを実行します。 IFは基本的にとなります。挿入ではなく削除である場合。したがって、UPDATEは基本的にDELETE + INSERTであるため、print文が実行される理由は不思議です。

+0

「INSTEAD OF」トリガーを使用することを意味すると思いますか?これは 'inserted'と' deleted'テーブルを保持します。 'AFTER INSERT'は' inserted'テーブルIMOだけを保持します。 – NickyvV

+2

'update t set a = bここで1 = 0' –

+1

そして、何かが実際に他の場所から印刷されるという変更があります。 –

答えて

2

条件は、UPDATEステートメントで変更された行がない場合にのみtrueになります。

関連する問題