2008-12-09 47 views
0

我已經在SQL Server 2005中觸發以下代碼:SQL Server 2005觸發器 - 如何安全地確定是否由UPDATE或DELETE觸發?

 
CREATE TRIGGER [myTrigger] ON [myTable] 
FOR UPDATE,DELETE 
AS 
BEGIN 

DECLARE @OperationType VARCHAR(6) 
IF EXISTS(SELECT 1 FROM INSERTED) 
BEGIN 
    SET @OperationType='Update' 
END 
ELSE 
BEGIN 
    SET @OperationType='Delete' 
END 

我的問題:是否有一種情況,就是@OperationType不正確填充? E.G .:表中的數據被一堆UPDATE/DELETE語句改變,但是觸發器並不是每個都觸發一次?

您是否有更好的方法來確定觸發器是否由UPDATE或DELETE語句觸發?

回答

4

爲什麼不只是創建兩個單獨的觸發器?

CREATE TRIGGER [myUpdateTrigger] ON [myTable] 
FOR UPDATE 
AS 
BEGIN 

END 

CREATE TRIGGER [myDeleteTrigger] ON [myTable] 
FOR DELETE 
AS 
BEGIN 

END 
3

答案很簡單:沒有,不會有在觸發無法正確檢測情況(除了當沒有更改的行)。

觸發器將被用於每個語句觸發一次,這樣的事情是不可能的,它會正常工作,但問題是,如果你真的想爲UPDATEDELETE做不同的任務,你最好使用情侶觸發器。