MsSql 多事务 处理
我碰到的问题是出库的,
列有 “产品ID“,“出库数量”
一次出库会有上千个产品ID,
例如,产品ID为 A0001要出库1000,步骤是:
1、判断要出库的产品ID是否存在。
2、判断要出库的产品ID库存是否 足够 扣减
3、如果库存充足,要有出库记录、库存扣减
这样子该编程怎么实现啊,好复杂啊。
问题1:出库记录、库存扣减 怎么生成这个SQL脚本合理些呢?
求助大牛们!
[解决办法]
所有内容不要程序中实现了,trigger中处理吧
1.存不存在,出库时判断下就可以了,不存在提示自定义错误,直接return,此步也可在程序中实现
2.够不够扣,其接扣,若余数小于0给出错误,回滚记录rollback;return;,此步最好trigger中实现
3.出库记录在trigger中记录到其他表,其实你的单据就应有出仓的那一层,本身就是个记录,何需另外记录
[解决办法]
--存储过程创建语法...begin transelect a.listid,b.productidfrom IM_Out a join IM_OutDetail b on a.id = b.out_idwhere a.id = ? and not exists (select 1 from IM_Stock where warehouseid = a.warehouseid and product_id = b.product_id and quantity >= b.quantity)if @@rowcount > 0 begin commit tran return endelse begin --update 更新库存量 update c set c.quantity = c.quantity - b.quantity from IM_Out a join IM_OutDetail b on a.id = b.out_id join IM_Stock c on a.warehouseid = c.warehouseid and b.product_id = c.product_id where a.id = ? commit tran end
[解决办法]
if (查找库存的数量)> 0
begin
if 查找库存的数量 >要出货的数量
begin
update 库存表
set 库存数量 = 库存数量 - 要出货的数量
where 出货单 = 传入参数
insert into 库存记录表
select 出货单,要出货的数量,进出类型标记
end
else
begin
RAISERROR('库存有,但是不足出货', 18, 1)
end
end
else
begin
RAISERROR('库存为0', 18, 1)
end