create trigger mytr on table2 for insert,update,delete as 
update table2
set val = b.val
from (select pro,val=sum(val) from 
         (select pro,val
          from table1 where pro in(select pro from deleted union
                                   select pro from inserted)
          union all
          select pro,val from inserted
          union all
          select pro,-val from deleted) as tmp
          group by pro
      ) as b

解决方案 »

  1.   

    create trigger mytr on table2 for insert,update,delete as 
    update table2
    set val = b.val
    from (select pro,val=sum(val) from 
             (select pro,val
              from table1 where pro in(select pro from deleted union
                                       select pro from inserted)
              union all
              select pro,val from inserted
              union all
              select pro,-val from deleted) as tmp
              group by pro
          ) as b
    where table2.val = b.val
      

  2.   

    或者更简单:create trigger mytr on table2 for insert,update,delete as 
    update table2
    set val = table2.val + b.val
    from (select pro,val=sum(val) from 
             (select pro,val from inserted
              union all
              select pro,-val from deleted) as tmp
              group by pro
          ) as b
    where table2.val = b.val但没有考虑插入新val值的情况。