TRIGGER中错误的事件队列

时间:2013-06-03 14:10:07

标签: c# tsql

我有桌面人员有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

这篇文章的例子:

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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