2013-06-03 2 views
0

У меня есть стол, у которого есть два триггера (если данные вставлены, триггеры делают обновление), все триггеры: после вставки позже Вставляю информацию о событиях в другую таблицу, и я получаю (Update , «Обновить», «Вставить»), но должен быть указан (вставка, обновление, обновление). Знаете ли вы, почему?Неверная очередь событий в TRIGGER

У меня проблема с этим примером:

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)

+2

Итак, у вас есть два триггера AFTER INSERT? – gbn

+0

@gbn да у меня есть. –

+0

@gbn Знаете ли вы, где может быть проблема? –

ответ

4

Там не гарантируется для того, чтобы вызвать стрельбу, если вы не используете sp_settriggerorder. Но тогда вам придется устанавливать это каждый раз, когда вы запускаете ALTER TRIGGER.

Лично я никогда бы не 2 спусковых на то же действие, так что я хотел бы сделать одно из этих

  • Используйте один триггер, чтобы сделать вещи проще
  • Используйте хранимую процедуру так, чтобы логика более прозрачный

Это включает в себя вещи, имеющие как до, так и после триггеров: это требует хранимой процедуры.

+0

Спасибо за помощь. Я также думаю, что это неправильный способ иметь более одного триггера в таблице, но это не мое решение. –