É essencial que os números de lote sejam sequenciais? Por que não usar apenas uma
identity
? Isso é melhor em termos de simultaneidade, caso contrário, você precisa bloquear tentativas de inserção simultâneas caso elas sejam revertidas e deixem uma lacuna na sequência. Se for absolutamente um requisito, no entanto, você pode fazer
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
Insira uma linha com uma semente inicial.
INSERT INTO dbo.Sequence
(val)
VALUES (1)
Em seguida, para alocar um intervalo de tamanho suficiente para sua inserção (chame-o na mesma transação, obviamente)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);