Er det vigtigt, at partinumrene er sekventielle? Hvorfor ikke bare bruge en identity
? Dette er bedre med hensyn til samtidighed, da du ellers er nødt til at blokere samtidige indsættelsesforsøg, hvis de bliver rullet tilbage og ville efterlade et hul i sekvensen.
Hvis det absolut er et krav, kan du dog gøre det
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
Indsæt en række med et første frø.
INSERT INTO dbo.Sequence
(val)
VALUES (1)
Så for at tildele en række af tilstrækkelig størrelse til dit skær (kald det selvfølgelig i samme transaktion)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);