分别有两个表
入库表: 物料名称 物料型号 入库数量 入库时间 管理员工标号
物料汇总表: 物料名称 物料型号 最大库存量 最小库存量 实际库存量
我想当入库表中的入库数量发生变化时,物料汇总表的实际库存量相应地增加变化的值,请问这用触发器怎么实现,O(∩_∩)O谢谢!!是SQL的触发器.
入库表: 物料名称 物料型号 入库数量 入库时间 管理员工标号
物料汇总表: 物料名称 物料型号 最大库存量 最小库存量 实际库存量
我想当入库表中的入库数量发生变化时,物料汇总表的实际库存量相应地增加变化的值,请问这用触发器怎么实现,O(∩_∩)O谢谢!!是SQL的触发器.
as
begin
update a set 实际库存量=实际库存量-c.入库数量+b.入库数量
from 物料汇总表 a,inserted b,delete c
where a.物料名称=b.物料名称 and a.物料型号=b.物料型号
end
as
begin
update
a
set
实际库存量=实际库存量-c.入库数量+b.入库数量
from
物料汇总表 a,inserted b,delete c
where
a.物料名称=b.物料名称 and a.物料型号=b.物料型号
end
最好拆成三个触发器来分别处理,这样效率高一些:
create trigger tr_insert on 入库表 for insert
as
begin
insert into 物料汇总表
select 物料名称,物料型号,1000 as 最大库存量, 100 as 最小库存量,入库数量 --这里的1000,100按你的实际值修改
from inserted
endcreate trigger tr_update on 入库表 from update
as
begin
update a set 实际库存量=a.实际库存量-b.入库数量+c.入库数量
from 物料汇总表 a inner join deleted b on a.物料名称=b.物料名称
inner jion inserted c on a.物料名称=c.物料名称
endcreate trigger tr_delete on 入库表 from delete
as
begin
update a set 实际库存量=a.实际库存量-b.入库数量
from 物料汇总表 a inner join deleted b on a.物料名称=b.物料名称
end
如果一次更新多笔入库表的记录, 需要在触发器里用游标处理inderted表每条记录.create trigger tr_insert on 入库表 for insert
as
begin
insert into 物料汇总表
select 物料名称,物料型号,1000 as 最大库存量, 100 as 最小库存量,入库数量 --这里的1000,100按你的实际值修改
from inserted
endcreate trigger tr_update on 入库表 from update
as
begin
declare @x varchar(200), @y int
declare ap scroll cursor for
select 物料名称,入库数量 from inserted
open ap
fetch first from ap into @x,@y
while(@@FETCH_STATUS <> -1)
begin
update a set 实际库存量=a.实际库存量+@y
from 物料汇总表 a
where a.物料名称=@x
fetch next from ap into @spid
endclose ap
deallocate ap
endcreate trigger tr_delete on 入库表 from delete
as
begin
update a set 实际库存量=a.实际库存量-b.入库数量
from 物料汇总表 a inner join deleted b on a.物料名称=b.物料名称
end