MsSql 多事务 处理

ziyan4444 2012-07-26 06:35:22
我碰到的问题是出库的,
列有 “产品ID“,“出库数量”
一次出库会有上千个产品ID,
例如,产品ID为 A0001要出库1000,步骤是:
1、判断要出库的产品ID是否存在。
2、判断要出库的产品ID库存是否 足够 扣减
3、如果库存充足,要有出库记录、库存扣减

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

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

求助大牛们!
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
icebbb34 2012-07-27
  • 打赏
  • 举报
回复
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
AcHerat 2012-07-27
  • 打赏
  • 举报
回复
这个没有涉及到价格的话很容易了呀!

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


--存储过程创建语法...

begin tran
select a.listid,b.productid
from IM_Out a join IM_OutDetail b on a.id = b.out_id
where 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
end
else
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


随手写的了,大概也就这样子。
zhazhuzhao 2012-07-27
  • 打赏
  • 举报
回复
写个存储过程,把逻辑封装进去,然后程序调用一下好了。
也可以程序中封装一个事物,然后把所有逻辑做完了,一起提交或回滚。
还好了,这个很简单的了。
haitao 2012-07-27
  • 打赏
  • 举报
回复
只是update前的逻辑判断吧,不算多事务
稻庄 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
所有内容不要程序中实现了,trigger中处理吧
1.存不存在,出库时判断下就可以了,不存在提示自定义错误,直接return,此步也可在程序中实现
2.够不够扣,其接扣,若余数小于0给出错误,回滚记录rollback;return;,此步最好trigger中实现
3.出库记录在trigger中记录到其他表,其实你的单据就应有出仓的那一层,本身就是个记录,何需另外记录
[/Quote]

我觉得可以从这位师傅的话语中去探索
ziyan4444 2012-07-27
  • 打赏
  • 举报
回复
有没有比较好的相关教程推荐呢
人生无悔 2012-07-26
  • 打赏
  • 举报
回复
所有内容不要程序中实现了,trigger中处理吧
1.存不存在,出库时判断下就可以了,不存在提示自定义错误,直接return,此步也可在程序中实现
2.够不够扣,其接扣,若余数小于0给出错误,回滚记录rollback;return;,此步最好trigger中实现
3.出库记录在trigger中记录到其他表,其实你的单据就应有出仓的那一层,本身就是个记录,何需另外记录

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧