Ano, SQL 11 má objekty SEQUENCE, viz SQL Server v.Next (Denali) :Použití SEQUENCE .
Vytváření ručních sekvencí je možné, ale nedoporučuje se. Trik, jak vytvořit sekvenční generátor, je použít UPDATE WITH OUTPUT v tabulce sekvencí. Zde je pseudokód:
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
Vynechal jsem některé detaily, ale toto je obecná myšlenka. Je zde však obrovský problém:jakákoli transakce požadující další hodnotu v sekvenci se uzamkne tuto sekvenci, dokud se nepotvrdí, protože na hodnotu sekvence umístí aktualizační zámek. To znamená, že všechny transakce se musí při vkládání hodnot serializovat jedna po druhé a výsledná degradace výkonu je v reálném produkčním nasazení neúnosná.
Mnohem raději bych byl, abyste zůstal u typů IDENTITY. I když nejsou dokonalé, jsou mnohem lepší než to, čeho můžete dosáhnout sami.