¿Es esencial que los números de lote sean secuenciales? ¿Por qué no usar simplemente una identity
? ? Esto es mejor en términos de concurrencia ya que, de lo contrario, debe bloquear los intentos de inserción simultáneos en caso de que se reviertan y dejen un espacio en la secuencia.
Si es absolutamente un requisito, sin embargo, puede hacerlo
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
Inserta una fila con una semilla inicial.
INSERT INTO dbo.Sequence
(val)
VALUES (1)
Luego, para asignar un rango de tamaño suficiente para su inserción (llámelo en la misma transacción, obviamente)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);