Tak, SQL 11 zawiera obiekty SEQUENCE, zobacz SQL Server v.Next (Denali):Używanie SEKWENCJI .
Tworzenie ręcznych sekwencji jest możliwe, ale nie zalecane. Sztuczka do wykonania generatora sekwencji polega na użyciu UPDATE WITH OUTPUT w tabeli sekwencji. Oto pseudokod:
CREATE TABLE Sequences (
Name sysname not null primary key,
Sequence bigint not null default 0);
GO
CREATE PROCEDURE sp_getSequence
@name sysname,
@value bigint output
AS
UPDATE Sequences
SET Sequence = Sequence + 1
OUTPUT @value = INSERTED.Sequence
WHERE Name = @name;
GO
Pominąłem kilka szczegółów, ale to jest ogólna idea. Istnieje jednak ogromny problem:każda transakcja żądająca następnej wartości w sekwencji zostanie zablokowana tej sekwencji, dopóki nie zostanie zatwierdzona, ponieważ umieści blokadę aktualizacji na wartości sekwencji. Oznacza to, że wszystkie transakcje muszą być serializowane jedna po drugiej podczas wstawiania wartości, a wynikające z tego pogorszenie wydajności jest nie do zniesienia w rzeczywistych wdrożeniach produkcyjnych.
Wolałbym, abyś trzymał się typów TOŻSAMOŚCI. Chociaż nie są doskonałe, są znacznie lepsze niż to, co możesz osiągnąć samodzielnie.