从“插入触发器”中的另一个表中选择

时间:2012-05-22 05:26:51

标签: sql-server-2005 triggers

我正在维护一个审计表,其中我有一个父表和它的子表。我想将父审计表的主键插入到它的子审计表中。
我应该在插入“之前声明”而不是插入“触发器的”。这是我的代码:

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

上述代码不起作用,并将表格放入交易中。

1 个答案:

答案 0 :(得分:1)

触发前 - 当您想要在数据实际插入表格之前拦截数据时。

对于触发器 - 您的记录已插入,但仍可以修改。

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

返回原始查询

在上述情况中,您不应使用 Before Trigger 。考虑一个案例,当您的父表记录在某些事务和同一事务下的插入获得回滚时。在这种情况下,外键约束会崩溃。因为您将尝试在插入期间将父表的外键记录引用到子表中,这在父表中不存在。