存储过程中库藏的操作
存储过程中库存的操作
下酒店订单,2014-08-05 到2014-08-09共4天,订3间房。
存储过程:
锁定酒店房间的库存表(别人此时不能修改此表)
循环开始
判断第一天库存是否足够
如果库存足够:减当天库存
如果库存不足:回滚前面的修改(下单失败)
循环结束
解锁酒店房间的库存表
以上提到的锁定库存表和当有库存不足是进行回滚
有方法实现吗?
具体的代码应该怎么写?
------解决方案--------------------
应该先找出是否有满足要求的房源,确定后再一次性下单。
------解决方案--------------------
begin tran
declare @count
select count(1) into @count from table with(tablelockx) where ……
if(@count>3)
update table set where ……
else
print 订单失败
commit
------解决方案--------------------
业务逻辑应该就是要检查4天的库存是否足够,一次检查4天就好,不用回滚,话说5号到9号好像是5天:
假设表名为Stock,日期字段为stockDate, 空余房间数量为restCount
declare @count int
select @count = count(*)
from Stock
where stockDate between '2014-08-05' and '2014-08-09'
where restCount >= 3
-- 符合空余房间要求的库存日数,等于4天的话
if @count = 4
update Stock
下酒店订单,2014-08-05 到2014-08-09共4天,订3间房。
存储过程:
锁定酒店房间的库存表(别人此时不能修改此表)
循环开始
判断第一天库存是否足够
如果库存足够:减当天库存
如果库存不足:回滚前面的修改(下单失败)
循环结束
解锁酒店房间的库存表
以上提到的锁定库存表和当有库存不足是进行回滚
有方法实现吗?
具体的代码应该怎么写?
------解决方案--------------------
应该先找出是否有满足要求的房源,确定后再一次性下单。
------解决方案--------------------
begin tran
declare @count
select count(1) into @count from table with(tablelockx) where ……
if(@count>3)
update table set where ……
else
print 订单失败
commit
------解决方案--------------------
业务逻辑应该就是要检查4天的库存是否足够,一次检查4天就好,不用回滚,话说5号到9号好像是5天:
假设表名为Stock,日期字段为stockDate, 空余房间数量为restCount
declare @count int
select @count = count(*)
from Stock
where stockDate between '2014-08-05' and '2014-08-09'
where restCount >= 3
-- 符合空余房间要求的库存日数,等于4天的话
if @count = 4
update Stock