適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric SQL Database
SQL Server の指定されたテーブルの現在の ID 値をチェックし、必要に応じて ID 値を変更します。 ID 列の新しい現在の ID 値を手動で設定する場合に DBCC CHECKIDENT を使用することもできます。
構文
SQL Server と Azure SQL Database の構文:
DBCC CHECKIDENT
(
table_name
[ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
Azure Synapse Analytics の構文:
DBCC CHECKIDENT
(
table_name
[ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]
引数
table_name
現在の ID 値をチェックするテーブルの名前です。 指定されたテーブルには、ID 列が含まれている必要があります。 テーブル名は識別子の規則に従っている必要があります。 2 部または 3 部構成の名前は、Person.AddressType や [Person].[AddressType] のように区切る必要があります。
NORESEED
現在の ID 値を変更しないように指定します。
RESEED
現在の ID 値を変更するように指定します。
new_reseed_value
ID 列の現在の値として使用する新しい値です。
NO_INFOMSGS付き
すべての情報メッセージを表示しないようにします。
解説
現在の ID 値に加えられる特定の修正は、指定されているパラメーターによって異なります。
| DBCC CHECKIDENT コマンド | ID の修正または加えられた修正 |
|---|---|
DBCC CHECKIDENT (<table_name>, NORESEED) |
現在の ID 値がリセットされていません。
DBCC CHECKIDENT は、ID 列の現在の ID 値と現在の最大値を返します。 2 つの値が異なる場合は、エラーが発生しないよう、または連続値の一部が欠落しないように、ID 値をリセットする必要があります。 |
DBCC CHECKIDENT (<table_name>)or 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 が使用されます。 テーブルに行が存在する場合、または DELETE ステートメントを使用してすべての行が削除された場合は、挿入される次の行に new_reseed_value + 現在の増分の値が使用されます。 トランザクションによって行が挿入され、後でそのトランザクションがロールバックされた場合、挿入される次の行では、new_reseed_value + 現在の増分の値が、行が削除されたかのように使用されます。 テーブルが空でない場合、ID 値に ID 列の最大値より小さな値を設定すると、次の状況のいずれかが発生する可能性があります。- ID 列に PRIMARY KEY 制約または UNIQUE 制約が設定されている場合、生成される ID 値と既存の値との競合が原因で、テーブルに対する後続の挿入操作でエラー メッセージ 2627 が生成されます。 - PRIMARY KEY 制約または UNIQUE 制約がない場合、後続の挿入操作では重複した ID 値が生成されます。 |
例外
次の表に、DBCC CHECKIDENT で現在の ID 値が自動的にリセットされないときの条件と、値をリセットする方法を示します。
| 条件 | リセット方法 |
|---|---|
| 現在の ID 値がテーブルの最大値より大きい。 |
DBCC CHECKIDENT (<table_name>, NORESEED) を実行して、列の現在の最大値を確認します。 次に、 コマンドでその値を DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) として指定します。or DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) を低い値に設定して new_reseed_value を実行した後、DBCC CHECKIDENT (<table_name>, RESEED) を実行して値を修正します。 |
| すべての行がテーブルから削除されている。 |
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) を新しい開始値に設定して new_reseed_value を実行します。 |
シード値を変更する
シード値は、テーブルに読み込まれる最初の行の ID 列に挿入される値です。 以降の行にはすべて、現在の ID 値 (テーブルまたはビューに対して生成された最後の ID 値) に増分値を加えた値が格納されます。
以下のタスクに DBCC CHECKIDENT を使うことはできません。
テーブルまたはビューの作成時に ID 列に指定された、元のシード値を変更する。
テーブルまたはビュー内の既存の行にシード値を再生成する。
元のシード値を変更したり、任意の既存の行にシード値を再生成したりするには、ID 列を削除し、新しいシード値を指定して作り直す必要があります。 テーブルにデータが含まれている場合、ID 番号が、指定のシード値および増分値を使用して既存の行に追加されます。 行の更新順序は保証されません。
結果セット
ID 列を含むテーブルに対してオプションを指定するかどうかにかかわらず、DBCC CHECKIDENT は、ある操作以外のすべての操作に対して次のメッセージを返します。 それは、新しいシード値を指定する操作です。
ID 情報を調べています。現在の ID 値 '<現在の ID 値>'、現在の列値 '<現在の列値>'。 DBCC の実行が完了しました。 DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
DBCC CHECKIDENT を使い、RESEED <new_reseed_value> を使用して新しいシード値を指定する場合、次のメッセージが返されます。
ID 情報を調べています。現在の ID 値 '<現在の ID 値>'。 DBCC の実行が完了しました。 DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
アクセス許可
呼び出し元がテーブルを含むスキーマを所有しているか、sysadmin 固定サーバー ロール、db_owner 固定サーバー ロール、または db_ddladmin 固定サーバー ロールのメンバーである必要があります。
Azure Synapse Analytics には、db_owner アクセス許可が必要です。
例
A. 必要に応じて現在の ID 値をリセットする
次の例では、必要に応じて、AdventureWorks2025 データベース内の指定されたテーブルの現在の ID 値をリセットします。
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. 現在の ID 値を報告する
次の例では、AdventureWorks2025 データベース内の指定されたテーブルの現在の ID 値を報告します。ID 値が正しくない場合でも、ID 値の修正は行いません。
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. 現在の ID 値を強制的に新しい値に設定する
次の例では、 AddressTypeID テーブルの AddressType 列の現在の ID 値を強制的に 10 に設定します。 テーブルには既存の行があるため、挿入される次の行には値として 11 が使用されます。 列に定義された新しい現在の ID 値に 1 (列の増分値) を加えた値です。
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. 空のテーブルの ID 値をリセットする
次の例では、テーブル ID (1, 1) を仮定し、テーブルのすべてのレコードを削除した後に、ErrorLogID テーブルの ErrorLog 列の現在の ID 値を強制的に 1 に設定します。 テーブルには既存の行がないため、次に挿入される行では値に 1 が使用されます。つまり、TRUNCATE 後に列について定義された増分値を加えたり、DELETE 後に増分値を加えたり "しない"、新しい現在の ID 値です。
USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO