はい、SQL 11 には SEQUENCE オブジェクトがあります。 をご覧ください。 SQL Server v.Next (デナリ) :SEQUENCE の使用 .
手動シーケンスの作成は可能ですが、お勧めしません。シーケンス ジェネレーターを実行する秘訣は、シーケンス テーブルで UPDATE WITH OUTPUT を使用することです。擬似コードは次のとおりです:
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
詳細は省きましたが、これが一般的な考え方です。ただし、大きな問題があります。シーケンスの次の値を要求するトランザクションはすべてロックします。 これは、シーケンス値に更新ロックがかかるためです。つまり、すべて トランザクションは、値を挿入するときに相互にシリアル化する必要があり、その結果生じるパフォーマンスの低下は、実際の運用展開では耐えられません。
IDENTITY 型に固執していただきたいと思います。完璧ではありませんが、自分で達成できるものよりもはるかに優れています。