SQL チュートリアル 」
1. シナリオの再現ERP 購買・販売システムや 0A などのシステムがある場合注文番号を生成する操作を同時に実行すると、複数の人が同じ注文番号を取得することが容易になり、会社のビジネスに取り返しのつかない損失が発生します2. 同時実行性が高い状況を回避する方法注文番号が一意ではない場合
ストアド プロシージャが注文番号を生成するときは、最初に注文番号をテーブルに書き込み、次に注文番号の結果を表示します。生成された注文番号をテーブルに書き込むとき、2 つの状況が発生します。理由?このテーブルには主キー (主キーの一意性) があるため、
ステップ 1: データ テーブルを作成し、注文番号フィールドを主キー (一意の注文番号のキー) として設定します
#ステップ 2: 注文番号を生成するストアド プロシージャを作成する
生成される注文番号の形式は次のとおりです: カスタム プレフィックス 年、月、日のサフィックス (001、002、003) 1. まずストアド プロシージャを作成します
パラメータは @BILL_TYPECREATE PROCEDURE [dbo].[GetBillNO]
@BILL_TYPE nvarchar(3)
2. 年、月、日、サフィックスを生成します
年、月、日は次のとおりです。現在のシステム時刻、サフィックスの初期値は 0declare @BILL_NO nvarchar(15);declare @currentDate nvarchar(15);declare @lastno INT = 0;set @currentDate = Convert(varchar(10),Getdate(),112);
3 です。クエリ フォーム、テーブルの順序番号を取得します。
テーブルにクエリ、テーブルの順序番号を取得します。カスタム コンテンツに関連するプレフィックスを付けた最新の注文番号を @BILL_NOselect @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 に割り当てます。注文番号を生成します
If前の手順で取得した注文番号が空ではない場合、新しく生成される注文番号は元の注文番号 1
つまり、生成される注文番号は次のようになります。 QNB20200615016
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 サーバーには LPAD 機能がなかったため (足りない桁数を自動的に補完してくれる)、文字列のスプライシングを使用してから、 right をクリックして右側の 3 を取得します。目標は達成され ( ̄﹃ ̄)、デッドです
5。生成された注文番号をテーブルに挿入します
If the同じ注文番号がテーブルに存在する場合、テーブルへの挿入は失敗します 同じ注文番号がテーブルに存在しない場合、テーブルへの挿入は成功します
insert into Temp_Bill(BILL_NO,BILL_TYPE) values(@BILL_NO ,@BILL_TYPE )
注文がテーブルに正常に挿入されると、一意の注文番号が返されます (上記の 1 つのステップが失敗した場合、このステップは実行されません) select @BILL_NO as BILL_NO
4. 実行結果
2 2 回目に入力すると、テーブルにデータがあるため、最新の注文番号に従って、サフィックスに 1 を追加します:
5. 古いルール
コードのダウンロード リンク: SQL server_getbillno.bak
コードのスクリーンショット:
以上がSQL サーバーの高い同時実行性により、一意の注文番号が生成されますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。