Sql-Server-2008
如何判斷是插入還是更新
每當在 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 中,它們按操作觸發)。所以你需要:
- 使用循環呼叫儲存過程中的所有
RecordId
值inserted
。- 停止為此使用儲存過程並執行它在觸發器內執行的任何邏輯,作為基於集合的操作。