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 を実行するたびにこれを設定する必要があります。

個人的には、同じアクションで 2 つのトリガーを使用することはないので、これらのいずれかを実行します。

  • 単一のトリガーを使用して物事を単純化する
  • ロジックがより透過的になるようにストアド プロシージャを使用する

これには、トリガーの前と後の両方があるものが含まれます。これには、ストアド プロシージャが必要です。

于 2013-06-03T14:23:33.800 に答える