如果用触发器,则进货表/销售表/退货表各建一个.
如果用存储过程,则可以做成一个触发器,传递的参数有货物编号/数量/操作,根据操作参数分别进行相应的操作.可以以事务的方式保证数据更新的准确性.
CREATE PROCEDURE [dbo].[checkManage]
(
@hwbh int,
@sl int,
@czdh int
)
AS
begin
SET NOCOUNT ON;if @czdh=1 --入库
begin
insert into 进货表 (id,jhsl,....) values(@hwbh,@sl,....)
update 库存表 set kcl=kcl+@sl where id=@hwbh
end
else if @czdh=2  --销售
begin
insert into 销售表 (id,xssl,....) values(@hwbh,@sl,....)
update 库存表 set kcl=kcl-@sl where id=@hwbh
end
else if @czdh=3  --退货
begin
insert into 退货表 (id,thsl,....) values(@hwbh,@sl,....)
update 库存表 set kcl=kcl+@sl where id=@hwbh
endend

解决方案 »

  1.   

    如:create trigger tr_进货表 on 进货表
    after insert
    as
    update b
    set Qty=b.Qty+a.Qty
    from 
    (select Product,sum(Qty)Qty from inserted group by Product)a
    join
    库存表 b  on a.Product=b.Product--進貨在庫存表不存在時插入
    insert 库存表(Product,Qty)
    from 
    (select Product,sum(Qty)Qty from inserted group by Product)a
    left join
    库存表 b  on a.Product=b.Product
    where
    b.Product is null
      

  2.   

    我把4个表得结构贴下
    1
    进货表
    (主键) jhdh char 10 0
    spbh char 10 0
    gysbh char 10 0
    jhsl decimal 9 0
    jhdj decimal 9 0
    jhrq datetime 8 0
    2
    销售表
    (主键) xsdh char 10 0
    spbh char 10 0
    gysbh char 10 0
    xssl decimal 13 0
    xsdj decimal 13 0
    xsrq datetime 8 0
    3
    退货表
    (主键) thdh char 10 0
    spbh char 10 0
    gysbh char 10 0
    thsl decimal 9 0
    tgdj decimal 9 0
    thrq datetime 8 0
    4
    库存表
    (主键) kcbh char 10 0
    spmc varchar 40 0
    spgg varchar 20 0
    spdl char 20 0
    kcl decimal 9 0