我想在仓库数据库中,实现一个触发器,
    (1)新购一个新物料种类后,自动会将这个物料品名、数量等信息在新增到仓库结存表,并且数量用新购的数量来替代。
    (2)每一次出入库,都用出(或入)库数量自动在结存表中的相应物料中进行加减。
    
    比如:采购员新采购了一个代码为0545 品种物料 :15件,就在仓库的结存表中新增一条0545的记录信息,并且数量就用新购的数量15件
          每次出库时,就将出库数量自动在相应的结存表中进行相减。
          每欠入库时,就将入库数量自动在相应的结存表中进行相加。     这个触发器,要怎么写???

解决方案 »

  1.   

       结仓表的数据结构: 物料代码 、名称、库存数量 安全库存
       领料表数据结构:物料代码 、名称、领料部门、领料人、领用数量、PO号、领料单号
       进仓数据结构:物料代码 、名称、PO号、进仓单号、供应商、进仓数量是不是提供这个测试数据
      

  2.   

    大概的样子create trigger tri_进仓
    on 进仓数据
    for insert , update
    as
    begin
    update 结仓表 set 库存数量=库存数量 + 进仓数量 from inserted where 结仓表.物料代码=inserted.物料代码
    if @@rowcount=0
    insert  结仓表 select 物料代码,名称,进仓数量, 0 from inserted
    end create trigger trd_进仓
    on 进仓数据
    for delete 
    as
    begin
    update 结仓表 set 库存数量=库存数量 - 进仓数量 from deleted where 结仓表.物料代码=deleted.物料代码
    if @@rowcount=0
    insert 结仓表 select 物料代码,名称,-进仓数量, 0 from inserted
    end create trigger tri_领料
    on 领料表
    for insert , update
    as
    begin
    update 结仓表 set 库存数量=库存数量 - 领用数量 from inserted where 结仓表.物料代码=inserted.物料代码
    if @@rowcount=0
    insert  结仓表 select 物料代码,名称,-领用数量, 0 from inserted
    end create trigger trd_领料
    on 领料表
    for delete 
    as
    begin
    update 结仓表 set 库存数量=库存数量 + 领用数量 from deleted where 结仓表.物料代码=deleted.物料代码
    if @@rowcount=0
    insert 结仓表 select 物料代码,名称,领用数量, 0 from inserted
    end 
      

  3.   

    不行,我修改为下列正确的,保存和执行触发器都可以
    但就是不能“进仓”和“领料”表中修改任何列的数据。报不能修改表的数据提示已更新或删除的行要么不能使该行成为唯一行,要么改变了多个行(860行),
    这是为什么/??代码如下:create trigger trd_进仓
    on 进仓
    for delete
    as
    begin
    update 结存 set 现有库存=现有库存- 进仓.入仓数 from 进仓 where 结存.代码=进仓.物料代码
    if @@rowcount=0
    insert  结存(代码,名称规格色别,现有库存) select 物料代码,名称规格色别,入仓数 from 进仓
    endset ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    gocreate trigger tri_进仓
    on 进仓
    for insert , update
    as
    begin
    update 结存set 现有库存=现有库存+ 进仓.入仓数from 进仓where 结存.代码=进仓.物料代码
    if @@rowcount=0
    insert  结存(代码,名称规格色别,现有库存) select 物料代码,名称规格色别,入仓数from 进仓
    end