web-dev-qa-db-ja.com

挿入か更新かを判断する方法

INSERTがCUSTOMERテーブルで発生するたびに、 "StoredProcedure1"を呼び出す必要があり、UPDATEがCUSTOMERテーブルで発生するたびに、 "StoredProcedure2"を呼び出す必要があります引き金。 トリガーで挿入か更新かを判断する方法 SQL Server 2008から。

解決方法を教えてくれる人がいますか?

コード:

CREATE TRIGGER Notifications ON CUSTOMER
FOR INSERT,UPDATE
AS
BEGIN
DECLARE @recordId varchar(20);
set @recordId= new.Id;
    //if trigger is insert at the time I call to SP1
        EXEC StoredProcedure1 @recordId
    //if trigger is Upadeted at the time I call to SP2
        EXEC StoredProcedure2 @recordId
END
5
Ramesh S

UPDATE,INSERTのみなので、次のように言うことができます。

IF EXISTS (SELECT 1 FROM deleted)
  -- update
ELSE
  -- insert

しかし、もっと大きな問題があります。 new.Idのようなものはなく、挿入または更新は複数の行に影響を与える可能性があります(一部のプラットフォームでは、トリガーは行ごとに起動します。SQLServerでは、トリガーは操作ごとです)。したがって、次のいずれかを行う必要があります。

  1. ループを使用して、RecordIdinserted値のallのストアドプロシージャを呼び出します。
  2. このためのストアドプロシージャの使用を停止し、セットベースの操作として、トリガー内で行うロジックを実行します。
10
Aaron Bertrand