if update(a.num) 
update b
set allnowsum=sum(a.allnow)
FROM A 
WHERE A。PK = B。PK

解决方案 »

  1.   

    建议你INSERT、UPDATE、DELETE触发器合成一个触发器:
    create trigger tr_Test
    on TableName
    for insert,update,delete
    asselect pk,sum(ALLNOW) as ALLNOW into #Temp from insertedinsert #Temp select pk,sum(-ALLNOW) as ALLNOW from deletedselect pk,sum(ALLNOW) as ALLNOW into #Sum from #Tempupdate b 
      set b.ALLNOW=b.ALLNOW+t.ALLNOW
      from b,#Sum t
      where b.Pk=t.Pkinsert b(Pk,ALLNOW)
      select  pk,ALLNOW 
        from #Sum 
        where not exists (select * from B where #Sum.Pk=b.Pk)go这是个事例的写法,你要根据你的应用修改!
      

  2.   

    to:Haiwer(海阔天空),SORRY啊,我看得不是很懂,能帮我写一下吗:
    A表的结构:PK,ALLIN , ALLOUT ,日期
    b表的结构:PK,ALLIN , ALLOUT , ALLNOW...
    其中B表的ALLNOW应该等于allin - allout,
    而B表的ALLIN,ALLOUT等于SUM(ALLIN),SUM(ALLOUT) FROM A WHEHRE A.PK = B.PK
    那么这个触发器怎么写呢?马上结帐,谢谢!
      

  3.   

    应该是在你的程序中加上游标来处理多记录update
      

  4.   

    create trigger tr_Test
    on A
    for insert,update,delete
    asselect pk,sum(ALLIN) as ALLIN,sum(ALLOUT) as ALLOUT into #Temp from insertedinsert #Temp select pk,sum(-ALLIN) as ALLIN,sum(-ALLOUT) as ALLOUT from deletedselect pk,sum(ALLIN) as ALLIN,sum(ALLOUT) as ALLOUT into #Sum from #Tempupdate b 
      set ALLIN=b.ALLIN+t.ALLIN,
          ALLOUT=b.ALLOUT+t.ALLOUT,
          ALLNOW=b.ALLNOW+t.ALLIN-t.ALLOUT
      from b,#Sum t
      where b.Pk=t.Pkinsert b(Pk,ALLIN,ALLOUT,ALLNOW)
      select  pk,ALLIN,ALLOUT,ALLIN-ALLOUT AS ALLNOW
        from #Sum 
        where not exists (select * from B where #Sum.Pk=b.Pk)go
      

  5.   

    十分感谢Haiwer(海阔天空),问题解决了。
    能交个朋友吗,我是一个PB的程序员(只精通这个东西,不要见笑),希望多学习SQL语言,可以告诉我您的QQ或信箱吗?
    马上就结帐了,希望能回一下