我想用触发器在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

解决方案 »

  1.   

    触发器里面一个INSERTED,DELETED,都没有?
      

  2.   

    create trigger tri_peixun
    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
      

  3.   

    回4楼: 运行时提示:消息 207,级别 16,状态 1,过程 tri_peixun,第 7 行
    列名 'px_jifen' 无效。
      

  4.   

    select px_jifen from peixun 这个能查出结果,我的代码就没问题。
      

  5.   

    可以了,是我的问题,我太粗心了。非常抱歉,让你费心了。
    我昨天做视图的时候为了需要把px_jifen字段给删了,我忘这回事了,真不好意思。
      

  6.   

    为什么这个只能更新和删除,而不能插入呢?一旦插入原来的px_jifen数据立马清空为null!
      

  7.   

    成功了,太不容易了。
    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