Il y a quelques jours, j'ai écrit un article sur la façon de générer des numéros de commande uniques dans MySQL à haute concurrence , quelqu'un a envoyé un message privé pour demander s'il existe une version du serveur SQL Aujourd'hui à midi, j'ai écrit une implémentation à haute concurrence de la version du serveur SQL pour générer un numéro de commande unique. et SQL Server sont les mêmes. La raison principale est que certaines de leurs syntaxes sont différentes, vous constaterez donc que la description textuelle de cet article est presque la même, seuls le code et l'interface sont différents.
Recommandé : "Tutoriel SQL"
Dans un système d'achat et de vente ERP ou d'autres systèmes tels que 0A, le cas échéant sont multiples Si des personnes effectuent l'opération de génération de numéros de commande en même temps, il est facile pour plusieurs personnes d'obtenir le même numéro de commande, entraînant des pertes irréparables pour l'activité de l'entreprise
Nous pouvons utiliser des procédures stockées et des tables de données pour construire une table et créer des procédures stockées. La procédure stockée est responsable de la génération des numéros de commande, et la table est responsable de la gestion des problèmes d'unicité
Lorsque la procédure stockée génère un numéro de commande, écrivez d'abord le numéro de commande dans le tableau, puis affichez le résultat du numéro de commande. Lors de l'écriture du numéro de commande généré dans le tableau, deux situations se produiront. Parce que notre table a une clé primaire (unicité de la clé primaire)
Étape 1 : Créez une table de données et définissez le champ du numéro de commande comme clé primaire (la clé du numéro de commande unique)
Étape 2 : Créez une procédure stockée pour générer le numéro de commande Le format du numéro de commande généré est : préfixe personnalisé + année, mois et jour + suffixe (001, 002, 003)
1. Créez d'abord une procédure stockée Le paramètre est @ BILL_TYPE
CREATE PROCEDURE [dbo].[GetBillNO] @BILL_TYPE nvarchar(3)
2 Générez l'année, le mois et le jour et le suffixe l'année, le mois et le jour sont. l'heure système actuelle et la valeur initiale du suffixe est 0
declare @BILL_NO nvarchar(15);declare @currentDate nvarchar(15);declare @lastno INT = 0;set @currentDate = Convert(varchar(10),Getdate(),112);
3. Interrogez la table et obtenez le numéro d'ordre de la table Interrogez la table et obtenez le dernier numéro de commande dont le préfixe est lié au contenu personnalisé et attribuez-le à @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 Générez le numéro de commande
Exemple : Le numéro de commande obtenu : QNB20200615015
Le numéro de commande généré est : QNB20200615016Exemple : Générer Le numéro de commande : 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;
Si pareil. Le numéro de commande existe dans le tableau, l'insertion dans le tableau échoue Si le même numéro de commande n'existe pas dans le tableau, l'insertion dans le tableau est réussie
insert into Temp_Bill(BILL_NO,BILL_TYPE) values(@BILL_NO ,@BILL_TYPE )
Lorsque la commande est insérée avec succès dans le tableau, le numéro de commande unique peut être renvoyé (Si l'étape précédente échoue, cette étape ne sera pas exécutée)
select @BILL_NO as BILL_NO
QNB20200615001
2 Lorsque je le saisis pour la deuxième fois, en raison du Lorsqu'il y a des données, le dernier numéro de commande sera ajouté avec un suffixe de 1
QNB20200615002
5. Anciennes règles
Si vous êtes étudiant et n'avez pas de points, vous pouvez m'envoyer un message en privé et je vous l'enverrai gratuitement Code source
Lien de téléchargement du code : SQL server_getbillno.bak
Capture d'écran du code :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!