È essenziale che i numeri di lotto siano sequenziali? Perché non utilizzare semplicemente un'identity
? Questo è meglio in termini di concorrenza, altrimenti è necessario bloccare i tentativi di inserimento simultanei nel caso in cui vengano ripristinati e lascino uno spazio vuoto nella sequenza.
Se è assolutamente un requisito comunque puoi farlo
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
Inserisci una riga con un seme iniziale.
INSERT INTO dbo.Sequence
(val)
VALUES (1)
Quindi per allocare un intervallo di dimensioni sufficienti per il tuo inserto (chiamalo ovviamente nella stessa transazione)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);