DBCC CHECKIDENT (Transact-SQL)
SQL Server 2008 R2 で指定されたテーブルの現在の ID 値をチェックし、必要に応じて ID 値を変更します。ID 列の新しい現在の ID 値を手動で設定する場合に DBCC CHECKIDENT を使用することもできます。
構文
DBCC CHECKIDENT
(
table_name
[, { NORESEED | { RESEED [,new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
引数
table_name
現在の ID 値をチェックするテーブルの名前を指定します。指定されたテーブルには、ID 列が含まれている必要があります。テーブル名は、識別子の規則に従っている必要があります。NORESEED
現在の ID 値を変更しないように指定します。RESEED
現在の ID 値を変更するように指定します。new_reseed_value
ID 列の現在値として使用する新しい値を指定します。WITH NO_INFOMSGS
すべての情報メッセージを表示しないようにします。
説明
現在の ID 値に加えられる個々の修正は、指定されているパラメーターによって異なります。
DBCC CHECKIDENT コマンド |
加えられる ID の修正 |
---|---|
DBCC CHECKIDENT ( table_name, NORESEED ) |
現在の ID 値はリセットされません。DBCC CHECKIDENT は、ID 列の現在の ID 値と現在の最大値を返します。2 つの値が異なる場合は、エラーが発生しないよう、または連続値の一部が欠落しないように、ID 値をリセットする必要があります。 |
DBCC CHECKIDENT ( table_name ) または DBCC CHECKIDENT ( table_name, RESEED ) |
テーブルの現在の ID 値が、ID 列に格納されている最大の ID 値より小さい場合、テーブルの現在の ID 値は ID 列の最大値にリセットされます。「例外」を参照してください。 |
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) |
現在の ID 値を new_reseed_value に設定します。テーブルの作成以降に行が挿入されていない場合、または TRUNCATE TABLE ステートメントによってすべての行が削除されている場合、DBCC CHECKIDENT の実行後に挿入される最初の行の ID には new_reseed_value が使用されます。行が既に挿入されている場合、次に挿入される行には new_reseed_value + 現在の増分値が使用されます。 テーブルが空でない場合、ID 値に ID 列の最大値より小さな値を設定すると、次の状況のいずれかが発生する可能性があります。
|
例外
次の表に、DBCC CHECKIDENT で現在の ID 値が自動的にリセットされないときの条件と、ID 値をリセットする方法を示します。
条件 |
リセット方法 |
---|---|
現在の ID 値がテーブルの最大値より大きい。 |
または
|
すべての行がテーブルから削除されている。 |
new_reseed_value を開始値に設定して、DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) を実行します。 |
シード値の変更
シード値は、テーブルに読み込まれる最初の行の ID 列に挿入される値です。以降の行にはすべて、現在の ID 値 (テーブルまたはビューに対して生成された最後の ID 値) に増分値を加えた値が格納されます。詳細については、「識別子列の作成と変更」を参照してください。
DBCC CHECKIDENT を使用して、次のタスクを実行することはできません。
テーブルまたはビューの作成時に ID 列に指定された、元のシード値を変更する。
テーブルまたはビュー内の既存の行にシード値を再生成する。
元のシード値を変更したり任意の既存の行にシード値を再生成したりするには、ID 列を削除し、新しいシード値を指定して作り直す必要があります。テーブルにデータが含まれている場合、ID 番号が、指定のシード値および増分値を使用して既存の行に追加されます。行の更新順序は保証されません。
結果セット
ID 列を含むテーブルに対してオプションが指定されているかどうかにかかわらず、DBCC CHECKIDENT が返されます (値は異なります)。
Checking identity information: current identity value '290', current column value '290'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
権限
呼び出し元は、テーブルを所有しているか、sysadmin 固定サーバー ロール、db_owner 固定データベース ロール、または db_ddladmin 固定データベース ロールのメンバーである必要があります。
例
A. 必要に応じて現在の ID 値をリセットする
次の例では、必要に応じて、AdventureWorks2008R2 データベース内の AddressType テーブルの現在の ID 値をリセットします。
USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType");
GO
B. 現在の ID 値を報告する
次の例では、AdventureWorks2008R2 データベース内の AddressType テーブルの現在の ID 値を報告します。ID 値が正しくない場合でも、ID 値の修正は行いません。
USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", NORESEED);
GO
C. 現在の ID 値を強制的に新しい値に設定する
次の例では、AddressType テーブルの AddressTypeID 列の現在の ID 値を強制的に 10 に設定します。テーブルには既存の行があるため、次に挿入される行では値に 11 が使用されます。この値は、現在の ID 値に、列について定義された現在の増分値 1 を加えた値です。
USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", RESEED, 10);
GO