2008-12-09 58 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做不同的任务,你最好使用情侣触发器。