sql >> Base de Datos >  >> RDS >> Sqlserver

Leer e incrementar el valor int en SQL Server

¿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);