Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ler e incrementar o valor int no SQL Server


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