首页 新闻 搜索 专区 学院

sql server 顺序批量更新数据

0
悬赏园豆:20 [已解决问题] 解决于 2016-01-26 11:26

现有表card,如图

每行的当前库存量根据领卡数和操作类型算出,比如:取出11,就是上一行的库存量 111减去11,即111-11=100;领入111,就是上一行的库存量2加上111,即2+111=113,其他行以此类推。

现在如果修改某一行的领卡数,然后就能更新修改后的库存量以及以后各行的库存量,请问用sql语句如何做到?

正在了的主页 正在了 | 初学一级 | 园豆:153
提问于:2015-12-14 19:11
< >
分享
最佳答案
1

除了使用触发器,你也可以这样:

比如你要将id=37那一行的领卡数量修改成1

declare @id int=37, @new领卡数量 int=1 @tmp int;
set @tmp = (select 领卡数量-@new领卡数量 from card where id=@id);
update card set 当前库存量=(case when 操作类型='领入' then 当前库存量-@tmp else 当前库存量+@tmp end),领卡数量 = @new领卡数量 where id=@id;
update card set 当前库存量=当前库存量-@tmp where id>@id;

 

收获园豆:10
米修君 | 小虾三级 |园豆:553 | 2015-12-15 10:03
其他回答(1)
1

完成此功能需要借助sql中的触发器 trigger

一.领取卡片

create trigger tg1 before insert on 表名 for each row

begin

declare max integer;

select 当前库存量 into max from 表名 where Id=new.领取卡数量;

 if new.领取卡数量>max then

set new.领取卡数量=max;

end if;

update 表名 set 当前库存量=当前库存量-new.领取卡数量 where Id=new.领取卡数量;

 end;

二.修改卡片

 create trigger tg2 after update on 表名 for each row

 begin

 update 表名 set 当前库存量=当前库存量+(old.领取卡数量-new.领取卡数量) where Id=old.id;

end;

 

收获园豆:10
IT小哥哥 | 园豆:217 (菜鸟二级) | 2015-12-14 20:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册