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