Oui, SQL 11 a des objets SEQUENCE, voir SQL Server v.Next (Denali) :Utilisation de SEQUENCE .
La création de séquences manuelles est possible, mais non recommandée. L'astuce pour faire un générateur de séquences est d'utiliser UPDATE WITH OUTPUT sur une table de séquences. Voici le 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
J'ai omis quelques détails, mais c'est l'idée générale. Cependant, il y a un énorme problème :toute transaction demandant la valeur suivante sur une séquence sera verrouillée cette séquence jusqu'à ce qu'elle soit validée, car elle placera un verrou de mise à jour sur la valeur de la séquence. Cela signifie que tous les transactions doivent se sérialiser les unes après les autres lors de l'insertion de valeurs et la dégradation des performances qui en résulte est insupportable dans les déploiements de production réels.
Je préférerais de loin que vous vous en teniez aux types IDENTITY. Bien qu'ils ne soient pas parfaits, ils sont bien meilleurs que ce que vous pouvez réaliser par vous-même.