我正在维护一个审计表,其中我有一个父表和它的子表。我想将父审计表的主键插入到它的子审计表中。
我应该在插入“之前声明”而不是插入“触发器的”。这是我的代码:
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
上述代码不起作用,并将表格放入交易中。
答案 0 :(得分:1)
触发前 - 当您想要在数据实际插入表格之前拦截数据时。
对于触发器 - 您的记录已插入,但仍可以修改。
唯一的区别是关于记录实际上是否已插入。
在上述情况中,您不应使用 Before Trigger 。考虑一个案例,当您的父表记录在某些事务和同一事务下的插入获得回滚时。在这种情况下,外键约束会崩溃。因为您将尝试在插入期间将父表的外键记录引用到子表中,这在父表中不存在。