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

Posted

技术标签:

【中文标题】SQL Server 2005 触发器 - 如何安全地确定是由 UPDATE 还是 DELETE 触发?【英文标题】:SQL Server 2005 trigger - how to safely determine if fired by UPDATE or DELETE? 【发布时间】:2008-12-09 15:53:55 【问题描述】:

我在 SQL Server 2005 触发器中有以下代码:

在 [myTable] 上创建触发器 [myTrigger] 更新,删除 作为 开始 声明 @OperationType VARCHAR(6) 如果存在(从插入中选择 1) 开始 SET @OperationType='更新' 结尾 别的 开始 SET @OperationType='删除' 结尾

我的问题:是否存在未正确填充 @OperationType 的情况?例如:表中的数据被一堆 UPDATE/DELETE 语句更改,但触发器不是每个都触发一次?

您有更好的方法来确定触发器是由 UPDATE 还是 DELETE 语句触发的?

【问题讨论】:

【参考方案1】:

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

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

END

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

END

【讨论】:

【参考方案2】:

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

触发器将为每条语句触发一次,所以这是不可能的,它会正常工作,但关键是,如果你真的想为 UPDATEDELETE 执行不同的任务,你会最好使用几个触发器。

【讨论】:

以上是关于SQL Server 2005 触发器 - 如何安全地确定是由 UPDATE 还是 DELETE 触发?的主要内容,如果未能解决你的问题,请参考以下文章

SqlDependency通知sql server 2005不会在多个插入上触发

sql 检测更新触发器中修改的字段(sql server 2005)?

SQL Server 2005 如何将一个数据库中的几张表,引入到另一个数据库中。

sql server 2005 跨数据库操作

在 SQL Server 2005 上创建触发器需要 30 多分钟

深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数