实现的目的是:   想让修改了原来的进仓数据后,马上对库存数据进行的修改create trigger tru_进仓
on 进仓
for update
as
begin
update 结存set 现有库存=现有库存+ inserted.入仓数-deleted.入仓数 from inserted,deleted where 结存.代码=inserted.物料代码
if @@rowcount=0
insert 结存(代码,名称规格色别,现有库存) select 物料代码,名称规格色别,入仓数from inserted
end
 
   但我追踪了运行后结果发现:这个触发器,就跟插入的触发器一样,只能是将修改了数量加在原来的库存数上面了,这就严重不对了。
   要怎么修改才能实现修改后,能自动修改成正确的数量??。 2、另外,上面的语句能SQL2000中能正常运行(只是结果不对。)    但在SQL 2005中运行、保存都能通过,但再对 “进仓”表进行修改任何列的数据都会报错    提示:已更新或删除的行要么不能使该行成为唯一行,要么改变了多个行(2行),    这是为什么??

解决方案 »

  1.   

    update 结存set 现有库存=现有库存+ inserted.入仓数-deleted.入仓数 from inserted,deleted where 结存.代码=inserted.物料代码
    这句改成:(建议)
    update 结存set 现有库存=现有库存+ inserted.入仓数-deleted.入仓数 from inserted,deleted where 结存.代码=inserted.物料代码 and inserted.物料代码=deleted.物料代码
      

  2.   

    create trigger tru_进仓 on 进仓 for update 
    as
    begin
      if exists (select 1 from 结存 where 代码 = (select 物料代码 from inserted))
         update 结存 set 现有库存 = 现有库存 + inserted.入仓数 from 结存 , inserted where 结存.代码 = inserted.物料代码
      else
         insert 结存(代码,名称规格色别,现有库存) select 物料代码,名称规格色别,入仓数 from inserted
    end
      

  3.   

    三楼、四楼的都不对不行,我试了在SQL2000中