日期:2014-05-18  浏览次数:20395 次

加入一个触发器后,数据表就不再修改任何列的数据??
我想在仓库数据库中,实现一个触发器,
  (1)新购一个新物料种类后,自动会将这个物料品名、数量等信息在新增到仓库结存表,并且数量用新购的数量来替代。
  (2)每一次出入库,都用出(或入)库数量自动在结存表中的相应物料中进行加减。
   
  比如:采购员新采购了一个代码为0545 品种物料 :15件,就在仓库的结存表中新增一条0545的记录信息,并且数量就用新购的数量15件
  每次出库时,就将出库数量自动在相应的结存表中进行相减。
  每欠入库时,就将入库数量自动在相应的结存表中进行相加。
 ————————————————————————————————————————————
 下列触发器代码,在保存和执行触发器都可以
 但就是加入触发器后,就不能“进仓”和“领料”两个表中修改任何列的数据。
 
错误提示:不能修改表的数据提示已更新或删除的行要么不能使该行成为唯一行,要么改变了多个行(860行),
 这是为什么/??
 
代码如下:
 
create trigger trd_进仓
 on 进仓
 for delete
 as
 begin
 update 结存 set 现有库存=现有库存- 进仓.入仓数 from 进仓 where 结存.代码=进仓.物料代码
 if @@rowcount=0
 insert 结存(代码,名称规格色别,现有库存) select 物料代码,名称规格色别,入仓数 from 进仓
 end
 
set ANSI_NULLS ON
 set QUOTED_IDENTIFIER ON
 go
 
create trigger tri_进仓
 on 进仓
 for insert , update
 as
 begin
 update 结存set 现有库存=现有库存+ 进仓.入仓数from 进仓where 结存.代码=进仓.物料代码
 if @@rowcount=0
 insert 结存(代码,名称规格色别,现有库存) select 物料代码,名称规格色别,入仓数from 进仓
 end
 
我的触发器代码要怎么写???是不是我写的这些代码有逻辑错误??

------解决方案--------------------
你先把数据按照商品名和进出汇总,然后再去更新。使用case when 判断进出,为进则加上这个数量,为负减去这个数量
------解决方案--------------------
你先把数据按照商品名和进出汇总,然后再去更新。使用case when 判断进出,为进则加上这个数量,为负减去这个数量