0

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

我对这个例子有疑问:

    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

这篇文章的例子:

如何在 SQL Server 触发器中复制插入、更新、删除的行

4

1 回答 1

4

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

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

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

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

于 2013-06-03T14:23:33.800 回答