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

任何帮助是极大的赞赏。

4

2 回答 2

0

首先确保触发器没有被禁用:

ENABLE Trigger tr_trigger_ins ON dbo.table_1;
GO
于 2012-06-02T23:13:49.287 回答
0

最终归结为复制问题。交易以与预期不同的顺序流动。一旦我们在触发逻辑中适应了这一点,它就会运行良好。

于 2012-11-09T13:40:14.037 回答