SQL server高并发生成唯一订单号
前言
前几天写了一篇MySQL高并发生成唯一订单号的方法,有人私信问有没有SQL server版本的,今天中午特地写了SQL server版本的高并发生成唯一订单号实现,其实MySQL和SQL server原理都一样,主要是他们部分语法有些区别,所以你会发现我这篇文章文字说明几乎一样,只有代码和界面不一样。
推荐:《SQL教程》
一、场景再现
在一个erp进销存系统或0A等其他系统中,如果多人同时进行生成订单号的操作的话,容易出现多人获得同一个订单号的情况,对公司业务造成不可挽回的损失
二、如何避免高并发情况订单号不唯一
我们可以利用存储过程和数据表搭配,建立一张表和创建存储过程,存储过程负责生成订单号,表负责处理唯一性问题
当存储过程生成一个订单编号,首先先把订单号写进表中,再把订单号结果显示出来,把生成的订单号写进表里会出现两种情况,为什么呢?因为我们的表设置了主键(主键唯一性)
能写进: 当表里没有相同的订单号,即把生成的订单号写进表里
不能写进:当表里存在相同的订单号,即生成的订单号无法写到表里,也就不能获取到订单号,从而确保高并发下生成唯一订单号
三、高并发情况下生成唯一订单号的过程
下面将用代码和实际操作讲解下生成唯一订单号的过程
第一步:建一张数据表,设置订单号字段为主键(唯一订单号的关键)
第二步:创建生成订编号的存储过程
生成订单编号格式为:自定义前缀+年月日+后缀(001、002、003)
1.首先创建一个存储过程
参数为@BILL_TYPE
CREATE PROCEDURE [dbo].[GetBillNO] @BILL_TYPE nvarchar(3)
2.生成年月日和后缀
年月日为当前系统时间,后缀初始值为0
declare @BILL_NO nvarchar(15);declare @currentDate nvarchar(15);declare @lastno INT = 0;set @currentDate = Convert(varchar(10),Getdate(),112);
3.查询表格,获取表格的订单编号
查询表格,获取前缀与自定义内容相关的最新一个订单编号并赋值给@BILL_NO
select @BILL_NO = isnull(BILL_NO,0) FROM temp_bill WHERE SUBSTRING(BILL_NO,1,3) =BILL_TYPE and SUBSTRING(BILL_NO,4,8) =@currentDate
4.生成订单编号
-
如果上一步获取的订单编号不为空,新生成的订单号在原订单号上+1
例:获取的订单号:QNB20200615015
即生成的订单号为:QNB20200615016 -
如果上一步获取的订单号为空,新生成的订单号后缀为001
例:生成的订单号:QNB20200615001
IF @BILL_NO !='' begin SET @lastno = str(right(@BILL_NO, 3)+1) ; set @BILL_NO = @BILL_TYPE+@currentDate+RIGHT('000'+CAST(@lastno as varchar),3); end;ELSE begin set @BILL_NO = @BILL_TYPE+@currentDate+CAST('001' as varchar(20));END;
在做这里的时候由于SQL server没有LPAD函数(不足规定位数自动补齐),所以用了字符串拼接,再用right去获取右边3位达到目的(¯﹃¯ ),枯了
5.将生成的订单号插入表中
如果表中存在相同订单号则插入表失败
如果表中不存在相同订单号则插入表成功
insert into Temp_Bill(BILL_NO,BILL_TYPE) values(@BILL_NO ,@BILL_TYPE )
6.返回唯一订单编号
当订单插入表成功,即可返回唯一的订单编号(如果上一步不成功,即不会运行这一步)
select @BILL_NO as BILL_NO
四、运行结果
1.首先我的表里没有数据,会生成前缀(我输入的:UIE)+年月日(20200615)+001(第一个数据,所以是001)
即:QNB20200615001
2当我第二次输入时,由于表里有数据了,会根据最新的订单编号后缀加1
即:QNB20200615002
五、老规矩
希望这篇文章可以帮到大家
积分充足的就直接下载吧,没有积分的对着图敲,反正代码量也不大
如果你是学生,没有积分,可以私聊我,免费给你发源码
代码下载链接:SQL server_getbillno.bak
代码截图:
以上是SQL server高并发生成唯一订单号的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

microsoft sql server是Microsoft公司推出的关系型数据库管理系统,是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理,具有使用方便可伸缩性好与相关软件集成程度高等优点。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。

SQLServer还是MySQL?最新研究揭秘最佳数据库选择近年来,随着互联网和大数据的快速发展,数据库的选择成为了企业和开发者们面临的一个重要问题。在众多数据库中,SQLServer和MySQL作为两个最为常见和广泛使用的关系型数据库,备受争议。那么,在SQLServer和MySQL之间,到底应该选择哪一个呢?最新的研究为我们揭示了这个问题。首先,让

随着互联网的普及,网站和应用程序的开发成为了许多企业和个人的主要业务。而PHP和SQLServer数据库则是其中非常重要的两个工具。PHP是一种服务器端脚本语言,可以用于开发动态网站;SQLServer是微软公司开发的关系型数据库管理系统,具有广泛的应用场景。在本文中,我们将讨论PHP和SQLServer的开发,以及它们的优缺点和应用方法。首先,让我们

如何使用PDO连接到MicrosoftSQLServer数据库介绍:PDO(PHPDataObjects)是PHP提供的一个访问数据库的统一接口。它提供了许多优点,比如实现了数据库的抽象层,可以方便地切换不同的数据库类型,而不需要修改大量的代码。本文将介绍如何使用PDO连接到MicrosoftSQLServer数据库,并提供一些相关代码示例。步骤

在Web开发中,PHP与MySQL的结合是非常常见的。但是,在某些情况下,我们需要连接其他类型的数据库,例如SQL Server。在本文中,我们将介绍使用PHP连接SQL Server的五种不同方法。

SQLServer与MySQL对比:哪个数据库更适合高可用性架构?在当今的数据驱动世界中,高可用性是构建可靠和稳定系统的必要条件之一。数据库作为数据存储和管理的核心组件,其高可用性对于企业的业务运转至关重要。在众多的数据库中,SQLServer和MySQL是常见的选择。那么在高可用性架构方面,究竟哪个数据库更适合呢?本文将对二者进行对比,并给出一些建议。

SQLServer和MySQL是目前两个非常流行的关系型数据库管理系统(RDBMS)。它们都是用于存储和管理大规模数据的强大工具。然而,它们在处理大规模数据时有一些不同之处。本文将对SQLServer和MySQL进行比较,重点是它们在大规模数据处理方面的适用性。首先,让我们来了解一下SQLServer和MySQL的基本特点。SQLServer是由微软

随着互联网的不断发展,数据库的选择愈发重要。在众多的数据库中,SQLServer和MySQL是两个备受瞩目的选项。SQLServer是微软公司开发的关系型数据库管理系统,而MySQL则是一种开源的关系型数据库管理系统。那么在SQLServer和MySQL之间如何选择最佳的数据库方案呢?首先,我们可以从性能方面比较这两个数据库。SQLServer在处理
