Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Lire et incrémenter la valeur int dans SQL Server

Est-il essentiel que les numéros de lot soient séquentiels ? Pourquoi ne pas simplement utiliser une identity ? C'est mieux en termes de simultanéité, sinon vous devez bloquer les tentatives d'insertion simultanées au cas où elles seraient annulées et laisseraient un vide dans la séquence.

Si c'est absolument une exigence, vous pouvez le faire

CREATE TABLE dbo.Sequence 
  (
     OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
     val    INT
  )  

Insérez une ligne avec une graine initiale.

INSERT INTO dbo.Sequence 
            (val)
VALUES     (1)  

Ensuite allouer une plage de taille suffisante pour votre insert (appelez-le dans la même transaction évidemment)

CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence 
SET @val = val = (val + @n);