首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

MsSql 多事宜 处理

2012-08-22 
MsSql 多事务 处理我碰到的问题是出库的,列有 “产品ID“,“出库数量”一次出库会有上千个产品ID,例如,产品ID

MsSql 多事务 处理
我碰到的问题是出库的, 
列有 “产品ID“,“出库数量”
一次出库会有上千个产品ID,
例如,产品ID为 A0001要出库1000,步骤是:
1、判断要出库的产品ID是否存在。
2、判断要出库的产品ID库存是否 足够 扣减
3、如果库存充足,要有出库记录、库存扣减

这样子该编程怎么实现啊,好复杂啊。

问题1:出库记录、库存扣减 怎么生成这个SQL脚本合理些呢?

求助大牛们!

[解决办法]
所有内容不要程序中实现了,trigger中处理吧
1.存不存在,出库时判断下就可以了,不存在提示自定义错误,直接return,此步也可在程序中实现
2.够不够扣,其接扣,若余数小于0给出错误,回滚记录rollback;return;,此步最好trigger中实现
3.出库记录在trigger中记录到其他表,其实你的单据就应有出仓的那一层,本身就是个记录,何需另外记录
[解决办法]

探讨
所有内容不要程序中实现了,trigger中处理吧
1.存不存在,出库时判断下就可以了,不存在提示自定义错误,直接return,此步也可在程序中实现
2.够不够扣,其接扣,若余数小于0给出错误,回滚记录rollback;return;,此步最好trigger中实现
3.出库记录在trigger中记录到其他表,其实你的单据就应有出仓的那一层,本身就是个记录,何需另外记录

[解决办法]
只是update前的逻辑判断吧,不算多事务
[解决办法]
写个存储过程,把逻辑封装进去,然后程序调用一下好了。
也可以程序中封装一个事物,然后把所有逻辑做完了,一起提交或回滚。
还好了,这个很简单的了。
[解决办法]
这个没有涉及到价格的话很容易了呀!

1、判断:产品是否存在以及是否有足够的库存扣减
2、更新:更新库存表相应产品的库存量

SQL code
--存储过程创建语法...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

热点排行