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

最終的には、複製の問題に行き着きました。トランザクションが予想とは異なる順序で流れました。トリガーロジックでこれに対応すると、うまく機能しました。

于 2012-11-09T13:40:14.037 に答える
0

まず、トリガーが無効になっていないことを確認します。

ENABLE Trigger tr_trigger_ins ON dbo.table_1;
GO
于 2012-06-02T23:13:49.287 に答える