(求助)并发造成单据重复如何解决?

herong888 herong888 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
生产环境是这样的:
t_BillCodeRule表存单据类型及各单据类型(如出库单)的最大单据编号的数字部分,比如00235
ICBillNo表存各单据类型最大单据的完整编号,比如TX00235


生成编号时是先从t_BillCodeRule表取出库单类型的最大编号。并储存在临时字段中,值是TX00235
再将00235+1的值00236写回t_BillCodeRule表
再将TX00236写回ICBillNo表
再将包括TX00235在内的信息返回供其他存储过程使用。

语句是:
CREATE procedure [dbo].[GetBillNo]
@Billtypeid int,
@Projectid int,
@FBillno nvarchar(20) OUTPUT
as
BEGIN TRANSACTION
Begin
Declare @TmpID nvarchar(10)
Declare @billno nvarchar(10)
Declare @qianz nvarchar(10)


SET @TmpID = (SELECT FID FROM t_BillCodeRule WITH(READUNCOMMITTED)
WHERE fbilltypeid=@Billtypeid and fprojectid=@Projectid)

select @qianz=Fprojectval FROM t_BillCodeRule WITH(READUNCOMMITTED)
WHERE fbilltypeid=@Billtypeid and fprojectid=1

update t_billcoderule with(rowlock) set fprojectval = fprojectval+1,
flength=case when (flength-len(fprojectval)) >= 0 then flength else len(fprojectval) end where FID = @TmpID

Update ICBillNo with(rowlock) Set FCurNo = (select top 1 isnull(fprojectval,1)
from t_billcoderule where FID = @TmpID) where fbillid = @Billtypeid
select @billno=left('0000000000',Flength-len(Fprojectval))+Fprojectval from t_billcoderule where FID = @TmpID

Update ICBillNo with(rowlock) Set FDesc = @billno Where FBillID = @Billtypeid
select @FBillno=@qianz+@billno

End
commit TRANSACTION
...全文

相关推荐

PHP实现Redis单据锁以及防止并发重复写入

一、写在前面: 在整个供应链系统中,会有很多种单据(采购单、入库单、到货单、运单等等),在涉及写单据数据的接口时(增删改操作),即使前端做了相关限制,还是有可能因为网络或异常操作产生并发重复调用的情况,导致对相同单据做相同的处理; 为了防止这种情况对系统造成异常影响,我们通过Redis实现了一个简单的单据锁,每个请求需先获取锁才能执行业务逻辑,执行结束后才会释放锁;保证了同一单据的并发重复操作请求只有一个请求可以获取到锁(依赖Redis的单线程),是一种悲观锁的设计; 注:Redis锁在我们的系统中一般只用于解决并发重复请求的情况,对于非并发的的重复请求一般会去数据库或日志校验数据的状态,两

weixin_38685455

何为Redis单据锁,如何防止并发重复写入的

何为Redis单据锁,如何防止并发重复写入的 在整个供应链系统中,会有很多种单据(采购单、入库单、到货单、运单等等),在涉及写单据数据的接口时(增删改操作),即使前端做了相关限制,还是有可能因为网络或异常操作产生并发重复调用的情况,导致对相同单据做相同的处理; 为了防止这种情况对系统造成异常影响,我们通过Redis实现了一个简单的单据锁,每个请求需先获取锁才能执行业务逻辑,执行结束后才会释放锁;保证了同一单据的并发重复操作请求只有一个请求可以获取到锁(依赖Redis的单线程),是一种悲观锁的设计; 注:Re

周先生OL

详解java解决分布式环境中高并发环境下数据插入重复问题

主要介绍了java解决并发数据重复问题 ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38699757

记一次 MySQL 并发时插入重复数据的解决方案

问题描述 首先,看一下我的表结构。 CREATE TABLE `coolq_qq_group_message_receiver` ( `id` int(11) NOT NULL AUTO_INCREMENT, `qq_group_number` varchar(12) NOT NULL COMMENT 'QQ群号码', `qq` varchar(12) NOT NULL COMMENT '酷Q接收者QQ号', `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `created_

weixin_38518885

java并发访问重复请求过滤问题

本篇文章给大家分享了关于java并发访问重复请求过滤的相关问题以及解决方法,对此有需要的朋友参考学习下。

weixin_38528463
评论 17
收藏 已收藏
分享
返回顶部
herong888
MS-SQL Server 34,876 成员 254,635 内容