0

親テーブルとその子テーブルがある監査テーブルを維持しています。親監査テーブルの主キーをその子監査テーブルに挿入したいと思います。「挿入用」トリガーではなく「挿入前」
を宣言する必要があります。これが私のコードです:

CREATE trigger [trgAudtblChild] On [tblChild]
for Insert 
as
BEGIN

declare @serNo  bigint 
declare @expSerNo  int 
declare @postPercent  numeric  (12, 2) 
declare @prdSAPid  varchar  (50) 
declare @lastUpdatedBy  int 
declare @lastUpdatedOn  smalldatetime 

SELECT 
 --@serno = serno,
 @expSerNo = expSerNo ,
 @postPercent = postPercent ,
 @prdSAPid = prdSAPid ,
 @lastUpdatedBy = lastUpdatedBy ,
 @lastUpdatedOn = lastUpdatedOn
FROM INSERTED

select @serno = max(at_serno) from AT_tblParent

insert into AT_tblChild(serNo, expSerNo, postPercent
                       , prdSAPid, lastUpdatedBy, lastUpdatedOn
                       , change_column_index) values(
                                  @serNo, @expSerNo, @postPercent
                          , @prdSAPid, @lastUpdatedBy, @lastUpdatedOn
                          , 'INSERTED')

End
Return

上記のコードは機能せず、テーブルをトランザクションに入れます。

4

1 に答える 1

1

Before Trigger-データが実際にテーブルに挿入される前にデータをインターセプトする場合。

For Trigger-レコードは挿入されていますが、変更することはできます。

唯一の違いは、aboutレコードが実際に挿入されているかどうかです。

元のクエリに戻る

上記の状況では、を使用しないでくださいBefore Trigger。親テーブルが特定のトランザクションの下に挿入を記録し、同じトランザクションがロールバックされる場合を考えてみます。その場合、外部キー制約のためにクラッシュします。親テーブルに存在しない挿入中に、親テーブルの外部キーレコードを子テーブルに参照しようとするためです。

于 2012-05-22T08:11:56.057 に答える