Ja, SQL 11 har SEQUENCE-objekt, se SQL Server v.Next (Denali) :Använder SEQUENCE .
Att skapa manuella sekvenser är möjligt, men rekommenderas inte. Tricket att göra en sekvensgenerator är att använda UPPDATERA MED UTGÅNG på en sekvenstabell. Här är 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
Jag utelämnade några detaljer, men detta är den allmänna idén. Det finns dock ett stort problem:alla transaktioner som begär nästa värde i en sekvens kommer att låsa den sekvensen tills den commit, eftersom den kommer att placera ett uppdateringslås på sekvensvärdet. Det betyder att alla transaktioner måste serialiseras efter varandra när värden infogas och den prestandaförsämring som resulterar är outhärdlig i verkliga produktionsinstallationer.
Jag skulle mycket hellre att du skulle hålla dig till IDENTITETStyperna. Även om de inte är perfekta, är de mycket bättre än vad du kan uppnå på egen hand.