SQL Server 2005触发器 - 如何安全地确定是否由UPDATE或DELETE触发?
问题描述:
我已经在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语句触发?
答
为什么不只是创建两个单独的触发器?
CREATE TRIGGER [myUpdateTrigger] ON [myTable]
FOR UPDATE
AS
BEGIN
END
CREATE TRIGGER [myDeleteTrigger] ON [myTable]
FOR DELETE
AS
BEGIN
END
答
答案很简单:没有,不会有在触发无法正确检测情况(除了当没有更改的行)。
触发器将被用于每个语句触发一次,这样的事情是不可能的,它会正常工作,但问题是,如果你真的想为UPDATE
和DELETE
做不同的任务,你最好使用情侣触发器。