2014-11-22 6 views
1

Просьба помочь, я пытался создать триггер обновления, чтобы вставлять данные в определенную таблицу, когда она обновляется с определенным значением. "Принято". по несколько урезонить триггер не стреляяSQL Server After Update Trigger Not firing

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[TRGIU_CLEARING_SAMPLE_RESULT]') and OBJECTPROPERTY(id, N'IsTrigger') = 1) 
 
DROP TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT] 
 
GO 
 

 
CREATE TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT] ON [dbo].[CLEARING_BATCH]    
 
AFTER INSERT     
 
AS     
 

 
IF UPDATE(QM_STATUS)     
 
BEGIN     
 
    Declare @QM_Status Varchar(12),     
 
      @QM_Status_Old Varchar(12),     
 
      @Submission_Pk Uniqueidentifier    
 
       
 
    SELECT @QM_Status = I.QM_STATUS,     
 
     @QM_Status_old = D.QM_STATUS,     
 
     @Submission_Pk = I.PK    
 
     [email protected]_used = LE.ID        
 
    FROM CLEARING_BATCH CB     
 
    LEFT JOIN SAMPLE_RESULT SR ON CB.PK = SR.PPK     
 
    JOIN INSERTED I ON SR.PK = I.PPK     
 
    JOIN DELETED D ON I.PK = D.PK 
 

 
       
 
    IF(@QM_Status = 'Accepted' and (@QM_Status <> @QM_Status_old or @QM_Status_old is null))     
 
    
 
    
 
    begin 
 

 
    INSERT INTO BATCH(PPK,BATCH_ID) 
 

 
    SELECT CB.PK,CB.BATCH_ID 
 
    FROM LABORATORY L 
 
    JOIN CLEARING_BATCH CB ON L.PK = CB.PPK 
 
    JOIN CLEARING_SAMPLE_RESULT CSR ON CB.PK = CSR.PPK 
 
    LEFT JOIN BATCH B ON CB.PK = B.PPK 
 
    WHERE B.PPK IS NULL 
 
    
 

 
    UPDATE BATCH 
 
    SET BATCH_ID = CB.BATCH_ID 
 

 
    FROM BATCH B 
 
    JOIN CLEARING_BATCH CB ON B.PPK = CB.PPK 
 

 
    END 
 
    end 
 
    GO

+0

Добавить вставку в произвольную таблицу аудита, чтобы просто посмотреть, что увольняют, то есть до вашего IF, чтобы что IF не останавливает выполнение кода. Возможно, даже добавьте больше одной вставки, чтобы увидеть, где ее «выбросили». –

+0

@BethuelMhiongo, не должен ли триггер ПОСЛЕ ОБНОВЛЕНИЯ в вашем случае? –

+1

Вы определили триггер 'AFTER INSERT' - это будет срабатывать после любого **' INSERT' ** - не 'UPDATE'! Вам нужен триггер 'AFTER UPDATE' ... –

ответ

1

У вас есть AFTER INSERT триггер

CREATE TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT] 
ON [dbo].[CLEARING_BATCH]    
AFTER INSERT     
AS    

, который будет срабатывать после любого INSERT утверждения, что вставки новые строки - это будет НЕ быть огнем d когда вы UPDATE что-то!

Если вы хотите, чтобы захватить UPDATE операции, вам нужно AFTER UPDATE курок вместо:

CREATE TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT] 
ON [dbo].[CLEARING_BATCH] 
AFTER UPDATE 
AS 
    ....