Ja, SQL 11 heeft SEQUENCE-objecten, zie SQL Server v.Next (Denali):SEQUENCE gebruiken .
Handmatige sequenties maken is mogelijk, maar wordt niet aanbevolen. De truc om een sequentiegenerator te maken, is om UPDATE WITH OUTPUT op een sequentietabel te gebruiken. Hier is pseudo-code:
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
Ik heb wat details weggelaten, maar dit is het algemene idee. Er is echter een enorm probleem:elke transactie die de volgende waarde op een reeks vraagt, wordt vergrendeld die reeks totdat deze wordt vastgelegd, omdat het een updatevergrendeling op de reekswaarde plaatst. Dit betekent dat alle transacties moeten na elkaar worden geserialiseerd bij het invoegen van waarden en de prestatievermindering die het gevolg is, is ondraaglijk in echte productie-implementaties.
Ik zou veel liever hebben dat je bij de IDENTITEIT-types blijft. Hoewel ze niet perfect zijn, zijn ze veel beter dan wat je alleen kunt bereiken.