我在SQL Server 2005触发器中有以下代码:
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语句触发?
答案 0 :(得分:4)
为什么不创建两个独立的触发器?
CREATE TRIGGER [myUpdateTrigger] ON [myTable]
FOR UPDATE
AS
BEGIN
END
CREATE TRIGGER [myDeleteTrigger] ON [myTable]
FOR DELETE
AS
BEGIN
END
答案 1 :(得分:3)
简单回答:不,不存在触发器无法正确检测的情况(除非没有更改的行)。
触发器将针对每个语句触发一次,因此事情是不可能的并且它将正常工作,但重点是,如果您真的想要为UPDATE
和DELETE
执行不同的任务,你最好使用几个触发器。