SQL Server 2005触发器 - 如何安全地确定是由UPDATE还是DELETE触发?

时间:2008-12-09 15:53:56

标签: database sql-server-2005 triggers

我在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语句触发?

2 个答案:

答案 0 :(得分:4)

为什么不创建两个独立的触发器?

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

END

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

END

答案 1 :(得分:3)

简单回答:不,不存在触发器无法正确检测的情况(除非没有更改的行)。

触发器将针对每个语句触发一次,因此事情是不可能的并且它将正常工作,但重点是,如果您真的想要为UPDATEDELETE执行不同的任务,你最好使用几个触发器。