我想用触发器在Sql Server2005中实现这样一个功能:
现在有一个主表peixun 主键px_id,字段px_jifen;明细表peixunMX 主键mx_id,外键px_id,字段mx_chengji;
比如主表中px_id=8的记录可以在明细表中有n条记录,其中主表中的px_jifen等于明细表中对应px_id的mx_chengji的和。
现在我想实现这样的功能,比如说,我在明细表中删除、更细、插入记录时,它会自动在主表中更新px_jifen的值,请问用触发器怎么样实现?(新手哦)create trigger tri_peixun
on peixunMX
after insert,delete,update
as
begin
declare @px_id bigint,
@px_jifen int,
set @px_jifen = (select sum(isnull(mx_chengji,0)) from peixunMX m where peixun.px_id = m.px_id)update peixun set px_jifen = @px_jifen where px_id = @px_idendGO
现在有一个主表peixun 主键px_id,字段px_jifen;明细表peixunMX 主键mx_id,外键px_id,字段mx_chengji;
比如主表中px_id=8的记录可以在明细表中有n条记录,其中主表中的px_jifen等于明细表中对应px_id的mx_chengji的和。
现在我想实现这样的功能,比如说,我在明细表中删除、更细、插入记录时,它会自动在主表中更新px_jifen的值,请问用触发器怎么样实现?(新手哦)create trigger tri_peixun
on peixunMX
after insert,delete,update
as
begin
declare @px_id bigint,
@px_jifen int,
set @px_jifen = (select sum(isnull(mx_chengji,0)) from peixunMX m where peixun.px_id = m.px_id)update peixun set px_jifen = @px_jifen where px_id = @px_idendGO
on peixunMX
after insert,delete,update
as
begin
update a set
a.px_jifen = isnull(a.px_jifen,0)+b.mx_chengji
from peixun a
join inserted b
on a.px_id=b.pz_id
update a set
a.px_jifen = isnull(a.px_jifen,0)-b.mx_chengji
from peixun a
join deleted b
on a.px_id=b.pz_idend
GO
列名 'px_jifen' 无效。
我昨天做视图的时候为了需要把px_jifen字段给删了,我忘这回事了,真不好意思。
CREATE TRIGGER tri_peixunON peixunMXAFTER INSERT, UPDATE, DELETE AS
begin update peixun set peixun.px_jifen=(select sum(peixunMX.mx_chengji) from peixunMX
where peixun.px_id=peixunMX.px_id)endGO