如果用触发器,则进货表/销售表/退货表各建一个.
如果用存储过程,则可以做成一个触发器,传递的参数有货物编号/数量/操作,根据操作参数分别进行相应的操作.可以以事务的方式保证数据更新的准确性.
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
如果用存储过程,则可以做成一个触发器,传递的参数有货物编号/数量/操作,根据操作参数分别进行相应的操作.可以以事务的方式保证数据更新的准确性.
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
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
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