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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++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之間,到底該選擇哪一個呢?最新的研究為我們揭示了這個問題。首先,讓

如何使用PDO連接到MicrosoftSQLServer資料庫介紹:PDO(PHPDataObjects)是PHP提供的一個存取資料庫的統一介面。它提供了許多優點,例如實作了資料庫的抽象層,可以方便地切換不同的資料庫類型,而不需要修改大量的程式碼。本文將介紹如何使用PDO連接到MicrosoftSQLServer資料庫,並提供一些相關程式碼範例。步驟

隨著互聯網的普及,網站和應用程式的開發成為了許多企業和個人的主要業務。而PHP和SQLServer資料庫則是其中非常重要的兩個工具。 PHP是一種伺服器端腳本語言,可用於開發動態網站;SQLServer是微軟公司開發的關聯式資料庫管理系統,具有廣泛的應用場景。在本文中,我們將討論PHP和SQLServer的開發,以及它們的優缺點和應用方法。首先,讓我們

SQLServer與MySQL比較:哪個資料庫更適合高可用性架構?在當今的數據驅動世界中,高可用性是建立可靠和穩定係統的必要條件之一。資料庫作為資料儲存和管理的核心元件,其高可用性對於企業的業務運作至關重要。在眾多的資料庫中,SQLServer和MySQL是常見的選擇。那麼在高可用性架構方面,究竟哪個資料庫比較適合呢?本文將對二者進行對比,並給予一些建議。

在Web開發中,PHP與MySQL的結合是非常常見的。但是,在某些情況下,我們需要連接其他類型的資料庫,例如SQL Server。在本文中,我們將介紹使用PHP連接SQL Server的五種不同方法。

SQLServer和MySQL是目前兩個非常流行的關係型資料庫管理系統(RDBMS)。它們都是用於儲存和管理大規模資料的強大工具。然而,它們在處理大規模數據時有一些不同之處。本文將對SQLServer和MySQL進行比較,重點在於它們在大規模資料處理方面的適用性。首先,讓我們來了解一下SQLServer和MySQL的基本特性。 SQLServer是由微軟

隨著網路的不斷發展,資料庫的選擇愈發重要。在眾多的資料庫中,SQLServer和MySQL是兩個備受矚目的選項。 SQLServer是微軟公司開發的關聯式資料庫管理系統,而MySQL則是一種開源的關係型資料庫管理系統。那麼在SQLServer和MySQL之間如何選擇最佳的資料庫方案呢?首先,我們可以從效能方面比較這兩個資料庫。 SQLServer正在處理
