Sql-Server-2008

如何判斷是插入還是更新

  • January 8, 2018

每當在 CUSTOMER 表中發生 INSERT 時,我需要呼叫“ StoredProcedure1 ”並且在 CUSTOMER 表中發生 UPDATE ,我需要在 Trigger 中呼叫“ **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

因為只有UPDATE,INSERT你可以說:

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

不過,你有一個更大的問題。不存在new.Id, 並且插入或更新可以影響多行(在某些平台中,觸發器按行觸發;在 SQL Server 中,它們按操作觸發)。所以你需要:

  1. 使用循環呼叫儲存過程中的所有RecordIdinserted
  2. 停止為此使用儲存過程並執行它在觸發器內執行的任何邏輯,作為基於集合的操作。

引用自:https://dba.stackexchange.com/questions/77755