Management Studio で作成するときに ID 列をシードします。
コードを使用してテーブルを作成する場合は、Transact-SQL (T-SQL) の CREATE TABLE ステートメントを次の形式で使用して、テーブルの ID 列を簡単にシードできます。
CREATE TABLE tablename
(
columnname datatype identity [(seed, increment)
[NOT FOR REPLICATION]],
[columnname ...]
)
コードでは、datatype は数値列です。シードと増分はどちらもオプションで、両方のデフォルト値は 1 です。
図 B は、CREATE TABLE を使用して Orders という名前のテーブルを作成し、OrderID 列の ID シード値と増分値をそれぞれ 100 と 10 に設定した結果を示しています。ご覧のとおり、最初の ID 値は 100 で、後続の各値は 10 ずつ増加します (increment に負の値を指定すると、ID 値を減らすことができます)。
また、CREATE TABLE を使用して ID 列をシードします。
チェックと再シード
たとえば、テーブルのすべてのレコードをアーカイブ テーブルにコピーしてから、ソース テーブルのすべてのレコードを削除する場合、ソース テーブルの ID 列を再シードして、順序を制御できるようにすることができます。T-SQL の DBCC CHECKIDENT を次のように使用して、ID 列を再シードします。
DBCC CHECKIDENT
(
tablename
[, [NORESEED | RESEED [, newreseedvalue]]]
)
[WITH NO_INFOMSGS]
表 A は、このステートメントのオプションのパラメーターを定義しています。
表 A: DBCC CHECKIDENT
パラメータ
説明
NORESEED 現在の ID 値と ID 列の現在の最大値を再シードせずに返します。これらの値は、通常、同じである必要があります。
RESEED 現在の ID 値が ID 列に格納されている最大 ID 値より小さい場合、ID 列の最大値を使用して現在の ID 値を変更します。
newreseedvalue 再シード時の新しいシード値を指定します。テーブルが空の場合、最初の ID 値 (DBCC CHECKIDENT の実行後) は newreseedvalue と等しくなります。テーブルにデータが含まれている場合、次の ID 値は newreseedvalue + 現在のインクリメント値 (デフォルトは 1) と等しくなります。この動作は、SQL Server 2005 の新機能です (2008 年も引き続き)。SQL Server 2000 は常にシード値を増やします。
WITH NO INFOMSGS すべての情報メッセージを抑制します。
技術的には、DBCC CHECKIDENT は ID 値をチェックして修正します。簡単に言えば、現在の ID 値を学習するか、既存の ID 列を再シードするために使用します。