入库出库后库存自动更新的SQL触发器语句是什么?

tb1(产品表)cpidcpnamecpcolorkucun1xxxxxx82xxxxxx7=================================tb2(入库... tb1 (产品表)
cpid cpname cpcolor kucun
1 xxx xxx 8
2 xxx xxx 7
=================================
tb2 (入库表)
riqi ruku cpid
2011-1-10 5 1
2011-1-11 10 1
2011-1-12 15 2
=========================
tb3 (出库表)
riqi chuku cpid
2011-1-10 5 1
2011-1-11 2 1
2011-1-12 8 2
================================
入库出库后TB1的kucun字段中的数据自动更新,删除或修改后也要自动更新,请高手帮忙写个SQL触发器,问题解决追加100分,谢谢!
SQL版本2000
1楼,谢谢你的回答,但我觉得复杂了点呀
将入库表和出库表的cpid相同的数据用SUM语句统计出来,用ruku字段-chuku字段,最后将数据更新到产品表kucun
====================================================
下面是一个入库自动更新库存的语句,请大家参考后修改为入库出库都更新库存
参考语句:
Create TRIGGER [dbo].[tgname]
ON [dbo].[tb2]
AFTER INSERT,UPDATE,DELETE AS
BEGIN
update tb1 set kucun=(select sum(ruku) from tb2 where cpid=tb1.cpid)
END
展开
 我来答
jyl_19
推荐于2017-12-16 · TA获得超过1002个赞
知道小有建树答主
回答量:708
采纳率:0%
帮助的人:1121万
展开全部
CREATE trigger [tri_ruku]
on [tb2] for insert,delete,update
as
begin
update tb1 set kucun=kucun-deleted.ruku from tb1,deleted
where tb1.cpid=deleted.cpid;
update tb1 set kucun=kucun+inserted.ruku from tb1,inserted
where tb1.cpid=inserted.cpid
end;
----------------------------------------------------
CREATE trigger [tri_chuku]
on [tb3] for insert,delete,update
as
begin
update tb1 set kucun=kucun+deleted.chuku from tb1,deleted
where tb1.cpid=deleted.cpid;
update tb1 set kucun=kucun-inserted.chuku from tb1,inserted
where tb1.cpid=inserted.cpid
end;
------------------------------------------------------------------
-------------------------------------------------------
Create TRIGGER [dbo].[tgname]
ON [dbo].[tb2]
AFTER INSERT,UPDATE,DELETE AS
BEGIN
update tb1 set kucun=(select sum(ruku) from tb2 where cpid=tb1.cpid)
END
库存=入库-出库,这个语句修改一下也没问题,但t2中每条记录的改动都将导致t1的数据全部修改一遍,效率不高。
前两个触发器只影响t1的相关数据。
清丽又平实灬彩霞6
2011-01-14 · 超过10用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
create trigger tr_insert_tb2 on tb2
for insert
as
begin
declare @cpid int
declare @cpname char(20)
declare @cpcolor char(2)
declare @kucun int
declare @ruku int
select @cpid=cpid,@cpname=cpname,@cpcolor=cpcolor,@ruku=ruku from inserted
select @kucun=kucun from tb1 where cpid=@cpid
if not exists(select cpid from tb1 where cpid=@cpid)
begin
insert into tb1 values(@cpid,@cpname,@cpcolor,@ruku)
update tb1 set kucun=(kucun+@ruku)
where cpid=@cpid
end
else
begin
select @kuncun=kucun from tb1 where cpid=@cpid
update tb1 set kucun=(kucun+@ruku)
where cpid=@cpid

end
end

create trigger tr_delete_tb2 on tb2
for delete
begin
declare @cpid int
declare @kucun int
declare @ruku int
select @cpid=cpid,@ruku=ruku from deleted
select @kucun=kucun from tb1 where cpid=@cpid
update tb1 set kucun=(kucun-@ruku) where cpid=@cpid
end

create trigger tr_update_tb2 on tb2
for update
begin
declare @cpid int
declare @kucun int
declare @oldruku int
declare @newruku int
select @cpid=cpid,@oldruku=ruku from deleted
select @cpid=cpid,@newruku=ruku from inserted
select @kucun=kucun from tb1 where cpid=@cpid
if(@kucun+@oldruku-@newruku)>=0
begin
update tb1 set kucun=(kucun+@oldruku-@newruku) where cpid=@cpid
end
end

create trigger tr_insert_tb3 on tb3
for insert
as
begin
declare @cpid int
declare @cpname char(20)
declare @cpcolor char(2)
declare @kucun int
declare @chuku int
select @cpid=cpid,@cpname=cpname,@cpcolor=cpcolor,@chuku=chuku from inserted
select @kucun=kucun from tb1 where cpid=@cpid
update tb1 set kucun=(kucun-@chuku)
where cpid=@cpid

end

create trigger tr_delete_tb3 on tb3
for delete
as
begin
declare @cpid int
declare @kucun int
declare @chuku int
select @cpid=cpid,@chuku=chuku from deleted
select @kucun=kucun from tb1 where cpid=@cpid
update tb1 set kucun=(kucun+@chuku) where cpid=@cpid
end

create trigger tr_update_tb3 on tb3
for update
as
begin
declare @cpid int
declare @kucun int
declare @oldchuku int
declare @newchuku int
select @cpid=cpid,@oldchuku=chuku from deleted
select @cpid=cpid,@newchuku=chuku from inserted
select @kucun=kucun from tb1 where cpid=@cpid
if(@kucun+@oldchuku-@newchuku)>=0
begin
update tb1 set kucun=(kucun+@oldchuku-@newchuku) where cpid=@cpid
end
end
无聊 就给你写了6个触发器 你可以看看 绝对没问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
公一南5M
2011-01-14 · TA获得超过115个赞
知道答主
回答量:100
采纳率:100%
帮助的人:59.6万
展开全部
触发器因为不同的数据库,脚本也不一样的。
我的建议,最好别用触发器,这个功能实际上通过编程很容易实现的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式