2012-06-02 94 views
0

我有一個觸發器在非生產中觸發未觸發問題,但相同的確切代碼在生產中未能觸發。我已經證實它沒有被禁用,我已經做了一個跟蹤,看它甚至沒有執行生產..我已經檢查了相關的OBJECTPROPERTY元素,它們是相同的。我已經確認代碼是一樣的。我已經確認相同的插件來自應用程序。下面是這個觸發代碼:觸發器未在生產中觸發,但在非生產中觸發

/****** 
    Object: Trigger [dbo].[tr_trigger_ins]  
    Script Date: 06/02/2012 16:51:51 
******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER OFF 
GO 

CREATE TRIGGER [dbo].[tr_trigger_ins] ON [dbo].[table_1] 
FOR INSERT 
AS 
BEGIN 
    UPDATE table_2 
    SET col_1 = 
     CASE 
     WHEN i.col_2 = '0' THEN 0 ELSE 1 
     END 
    FROM INSERTED i 
    INNER JOIN table_3 pa 
    ON i.col_3 = pa.col_3 AND pa.col_4 = 'ispublic' 
    INNER JOIN table_4 pp 
    ON i.col_5 = pp.col_5 
    INNER JOIN table_2 cs 
    ON pp.col_6 = cs.col_6 
END 
GO 

下面是一個觸發器是的,而不是插入的是在兩個環境中執行相同的表:

/****** 
    Object: Trigger [dbo].[tr_trigger_before_ins]  
    Script Date: 06/02/2012 16:55:52 
******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER OFF 
GO 

CREATE TRIGGER [dbo].[tr_trigger_before_ins] ON [dbo].[table_1] 
INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT INTO table_1 
    SELECT * FROM INSERTED 
    WHERE col_3 in (73, 199) 
END 
GO 

任何幫助是極大的讚賞。

+1

你是什麼意思的「相同的插入」?這是否意味着正在插入完全相同的數據?我的意思是,你的'INSTEAD OF'觸發器有'col_3'的條件。您是否驗證過插入的行是否符合條件? –

+0

我已經確認這些行匹配正在執行的條件,並且我沒有插入任何相同的數據,但是這第二個觸發器阻止數據進入與條件不匹配 – Russ960

+1

您是否檢查數據庫上是否允許遞歸觸發器水平?我沒有嘗試,但對我來說,似乎合乎邏輯的是,如果遞歸觸發器選項處於打開狀態,則反向觸發器只會在觸發器運行後才允許運行。 –

回答

0

它最終來到了複製的問題。事務以不同於預期的順序流動。一旦我們在觸發邏輯中適應了這一點,它運行良好。

0

首先確保扳機未被禁用:

ENABLE Trigger tr_trigger_ins ON dbo.table_1; 
GO 
+0

它沒有被禁用。 – Russ960