sql >> Databasteknik >  >> RDS >> Sqlserver

Läs och öka int-värdet i SQL Server

Är det viktigt att partinumren är sekventiella? Varför inte bara använda en identity ? Detta är bättre när det gäller samtidighet eftersom du annars måste blockera samtidiga insättningsförsök i fall de rullas tillbaka och skulle lämna en lucka i sekvensen.

Om det absolut är ett krav kan du dock göra

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

Sätt in en rad med ett första frö.

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

För att sedan allokera ett intervall av tillräcklig storlek för din insats (kalla det i samma transaktion uppenbarligen)

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


  1. VÄLJ alla de senaste postens distinkta nyckelord med ett icke-nullvärde i en kolumn

  2. Är det säkert att använda LIMIT utan BESTÄLLNING AV

  3. Konvertera en Unix-tidsstämpel till ett datumvärde i Oracle

  4. sammanfoga flera vanliga tabelluttryck