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】:简单回答:不,不会出现触发器无法正确检测的情况(除非没有更改的行)。
触发器将为每条语句触发一次,所以这是不可能的,它会正常工作,但关键是,如果你真的想为 UPDATE
和 DELETE
执行不同的任务,你会最好使用几个触发器。
【讨论】:
以上是关于SQL Server 2005 触发器 - 如何安全地确定是由 UPDATE 还是 DELETE 触发?的主要内容,如果未能解决你的问题,请参考以下文章
SqlDependency通知sql server 2005不会在多个插入上触发
sql 检测更新触发器中修改的字段(sql server 2005)?
SQL Server 2005 如何将一个数据库中的几张表,引入到另一个数据库中。