SQL Server にこの機能があればいいのにと思います。それは非常に多くのことをより簡単にします。
これが私がこれを回避した方法です。
tblIdentities というテーブルを作成します。この表に、最小値と最大値、およびシーケンス番号をリセットする頻度を記載した行を入力します。また、新しいテーブルの名前を入力します (tblMySeqNum と呼びます)。これを行うと、後でシーケンス番号ジェネレーターを追加するのがかなり簡単になります。
tblMySeqNum には 2 つの列があります。ID (int ID) および InsertDate (デフォルト値が GetDate() の日時列)。
新しい seq num が必要な場合は、このテーブルに挿入する sproc を呼び出し、SCOPE_IDENTITY() を使用して ID を作成します。tblIdentities の最大値を超えていないことを確認してください。その場合は、エラーを返します。そうでない場合は、シーケンス番号を返します。
さて、リセットしてクリーンアップします。tblIdentites にリストされているすべてのテーブル (今のところ 1 つだけ) をチェックして、それらをリセットする必要があるかどうかを確認する、必要に応じて定期的に実行するジョブを作成します。リセット値または時間に達した場合は、行にリストされているテーブルの名前 (この例では tblMySeqNum) に対して DBCC IDENT RESEED を呼び出します。これは、そのテーブルで実際には必要のない余分な行をクリアする良い機会でもあります。
ID を取得する sproc でクリーンアップや再シードを行わないでください。そうすると、シーケンス番号ジェネレーターはまったくうまくスケーリングしません。
前述したように、SQL Server のこの機能を使用すると、非常に多くのことが簡単になりますが、この回避策はかなりうまく機能することがわかりました。
ヴァッカーノ