Est-il essentiel que les numéros de lot soient séquentiels ? Pourquoi ne pas simplement utiliser une identity
? C'est mieux en termes de simultanéité, sinon vous devez bloquer les tentatives d'insertion simultanées au cas où elles seraient annulées et laisseraient un vide dans la séquence.
Si c'est absolument une exigence, vous pouvez le faire
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
Insérez une ligne avec une graine initiale.
INSERT INTO dbo.Sequence
(val)
VALUES (1)
Ensuite allouer une plage de taille suffisante pour votre insert (appelez-le dans la même transaction évidemment)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);