Je nezbytné, aby čísla šarží byla sekvenční? Proč prostě nepoužít identity
? To je lepší z hlediska souběžnosti, protože jinak musíte blokovat souběžné pokusy o vložení pro případ, že by byly vráceny zpět a ponechaly by mezeru v sekvenci.
Pokud je to absolutně požadavek, můžete to udělat
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
Vložte řádek s počátečním semenem.
INSERT INTO dbo.Sequence
(val)
VALUES (1)
Poté alokujte rozsah dostatečné velikosti pro vaši vložku (samozřejmě to nazvěte ve stejné transakci)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);