--创设入出为0时代表入,为1时代表出
create trigger t_process on 日志记录表
for insert,update,delete
as
--判断是否有足够的库存
if exists(select 1 from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
where isnull(a.数量,0)+isnull(b.数量,0)<0)
begin
raiserror('库存不足,操作无法进行',1,16)
rollback tran
end
else
begin
--更新仓库表中已经有产品的数量
update 仓库表 set 数量=isnull(a.数量,0)+isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
--插入仓库表中不存在的产品数量
insert into 仓库表(产品编号,仓库,数量)
select a.* from (
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) a left join 仓库表 b on a.产品编号=b.产品编号 and a.仓库=b.仓库
where b.产品编号 is null and b.仓库 is null
end
--减少删除的产品数量
update 仓库表 set 数量=isnull(a.数量,0)-isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from deleted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
go
--创设入出为0时代表入,为1时代表出
create trigger t_process on 日志记录表
for insert,update,delete
as
--更新仓库表中已经有产品的数量
update 仓库表 set 数量=isnull(a.数量,0)+isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
--插入仓库表中不存在的产品数量
insert into 仓库表(产品编号,仓库,数量)
select a.* from (
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) a left join 仓库表 b on a.产品编号=b.产品编号 and a.仓库=b.仓库
where b.产品编号 is null and b.仓库 is null
--减少删除的产品数量
update 仓库表 set 数量=isnull(a.数量,0)-isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from deleted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
go
我写了一个,不是最好:
CREATE TRIGGER UP_IN_DE_storelog ON [dbo].[StoreLog]
FOR INSERT, UPDATE, DELETE
AS
@IN_OUT bit
if (Select 入出 form 日志记录表)='1'--当为入库时
--如果是修改和删除,则deleted表中有数据
UPDATE 仓库表 SET 数量=a.数量+b.数量 FROM 仓库表 a,deleted b
--WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号
--如果是新增和修改,则inserted表中有数据
UPDATE 仓库表 SET 数量=a.数量-b.数量 FROM 仓库表 a,inserted b
WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号
else --当为出库时
UPDATE 仓库表 SET 数量=a.数量-b.数量 FROM 仓库表 a,deleted b
--WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号
--如果是新增和修改,则inserted表中有数据
UPDATE 仓库表 SET 数量=a.数量+b.数量 FROM 仓库表 a,inserted b
WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号
create trigger tr1 on lt
for insert ,delete,update
as
if
update kc set sl=sl+(case (select rc from inserted) when 0 then (0- (select sl from inserted)) else (select sl from inserted) end) where cpbh in (select cpbh from inserted)
update kc set sl=sl-(case (select rc from deleted) when 0 then (0- (select sl from deleted)) else (select sl from deleted) end) where cpbh in (select cpbh from deleted)
as
if
update kc set sl=sl+(case (select rc from inserted) when 0 then (0- (select sl from inserted)) else (select sl from inserted) end) where cpbh in (select cpbh from inserted)
update kc set sl=sl
测试如下:
go
insert into kc select '001','1',100
insert into lt select '001','1',0,10
select * from kc
我给你编写一个,自己在完善吧!