SQL server高並發生成唯一訂單號的方法實現

2022-09-21 00:48:09 字數 2103 閱讀 8860

前幾天寫了一篇mysql高並發生成唯一訂單號的方法,有人私信問有沒有sql server版本的,今天中午特地寫了sql server版本的高並發生成唯一訂單號實現,其實mysql和sql server原理都一樣,主要是他們部分語法有些區別,所以你會發現我這篇文章文字說明幾乎一樣,只有**和介面不一樣。

在乙個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

如果上一步獲取的訂單號為空,新生成的訂daqsahd單號字尾為001

例:生成的訂單號:qnb20200615001

if @bill_no !='' begin

set @lastno = str(right(@bill_no, 3)+1) ;

set @bill_no = @bill_type+@cu程式設計客棧rrentdate+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.首先我的表裡沒有資料,會生成字首(我輸入的:ui年月日(20200615)+001(第乙個資料,所以是001)

即:qnb20200615001

2當我第二次輸入時,由於表裡有資料了,會根據最新的訂單編號字尾加1

即:qnb20200615002

****鏈結:sql server_getbillno.bak

**截圖:

高並發生成唯一訂單號

最近開發一套會員系統,涉及到訂單號生成,在高並發條前提下,如何生成唯一的訂單號值得斟酌,我這裡提供一種較為可行的方案 public static string getorderidbyuuid 0 代表前面補充0 4 代表長度為4 d 代表引數為正數型 return time string.form...

PHP uniqid 高並發生成不重複唯一ID

php uniqid 函式可用於生成不重複的唯一識別符號,該函式基於微秒級當前時間戳。在高併發或者間隔時長極短 如迴圈 的情況下,會出現大量重複資料。即使使用了第二個引數,也會重複,最好的方案是結合md5函式來生成唯一id。php uniqid 生成不重複唯一標識方法一 這種方法會產生大量的重複資料...

PHP uniqid 高並發生成不重複唯一ID

php uniqid 函式可用於生成不重複的唯一識別符號,該函式基於微秒級當前時間戳。在高併發或者間隔時長極短 如迴圈 的情況下,會出現大量重複資料。即使使用了第二個引數,也會重複,最好的方案是結合md5函式來生成唯一id。php uniqid 生成不重複唯一標識方法一 這種方法會產生大量的重複資料...