2012-06-02 93 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