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- 您的记录已插入,但仍可修改。

唯一的区别是关于记录实际上是否插入。

回到原来的查询

在你上面提到的情况下,你不应该使用Before Trigger. 考虑一个案例,当您的父表记录在某些事务下插入并且相同的事务被回滚时。在这种情况下,它将因外键约束而崩溃。因为您将尝试在插入期间将父表的外键记录引用到子表中,而父表中不存在该外键记录。

于 2012-05-22T08:11:56.057 回答