Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Leggere e incrementare il valore int in SQL Server

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