【问题标题】:Wrong queue of events in TRIGGERTRIGGER 中的事件队列错误
【发布时间】:2013-05-29 17:23:52
【问题描述】:

我有一个表人,它有 2 个触发器(如果插入数据,触发器进行更新)所有触发器都是 插入后 稍后我将有关事件的信息插入到其他表中,我得到(更新, Update, Insert) 但应该是这个 (Insert, Update, Update) 你知道为什么吗?

我对这个例子有疑问:

    DECLARE @HistoryType CHAR(1) --"I"=insert, "U"=update, "D"=delete
    SET @HistoryType=NULL

    IF EXISTS (SELECT *
               FROM   inserted)
      BEGIN
          IF EXISTS (SELECT *
                     FROM   deleted)
            BEGIN
                --UPDATE
                SET @HistoryType='U'
            END
          ELSE
            BEGIN
                --INSERT
                SET @HistoryType='I'
            END
      END
    ELSE IF EXISTS(SELECT *
              FROM   deleted)
      BEGIN
          --DELETE
          SET @HistoryType='D'
      END
    IF @HistoryType='U' or @HistoryType='I'
   //do something
    END

这篇文章的例子:

How to copy an inserted,updated,deleted row in a SQL Server trigger(s)

【问题讨论】:

  • 那么,你有两个 AFTER INSERT 触发器?
  • @gbn 你知道哪里有问题吗?

标签: c# tsql


【解决方案1】:

没有保证触发触发的顺序,除非您使用sp_settriggerorder。 但是你必须在每次运行 ALTER TRIGGER 时进行设置。

就我个人而言,我永远不会在同一个动作上触发 2 个触发器,所以我会做其中一个

  • 使用单个触发器让事情变得更简单
  • 使用存储过程,让逻辑更透明

这包括具有前后触发器的事物:这要求存储过程。

【讨论】:

  • 感谢您的帮助。我也认为s wrong way to have more then one trigger in table but its 不是我的决定。
猜你喜欢
  • 2020-10-05
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多