DBCC CHECKIDENT (Transact-SQL)

更新 : 2008 年 11 月 17 日

指定されたテーブルの現在の ID 値をチェックし、必要に応じて ID 値を変更します。ID 列の新しい現在の ID 値を手動で設定する場合に DBCC CHECKIDENT を使用することもできます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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 が返されます (値は異なります)。

Checking identity information: current identity value '290', current column value '290'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

シード値の変更

シード値は、テーブルに読み込まれる最初の行の ID 列に挿入される値です。以降の行にはすべて、現在の ID 値 (テーブルまたはビューに対して生成された最後の ID 値) に増分値を加えた値が格納されます。詳細については、「識別子列の作成と変更」を参照してください。

DBCC CHECKIDENT を使用して、次のタスクを実行することはできません。

  • テーブルまたはビューの作成時に ID 列に指定された、元のシード値を変更する。
  • テーブルまたはビュー内の既存の行にシード値を再生成する。

元のシード値を変更したり任意の既存の行にシード値を再生成したりするには、ID 列を削除し、新しいシード値を指定して作り直す必要があります。テーブルにデータが含まれている場合、ID 番号が、指定のシード値および増分値を使用して既存の行に追加されます。行の更新順序は保証されません。

解説

現在の 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 の実行後に挿入される最初の行の識別子には new_reseed_value が使用されます。行が既に挿入されている場合、次に挿入される行には new_reseed_value + 現在の増分値が使用されます。

テーブルが空でない場合、ID 値に ID 列の最大値より小さな値を設定すると、次の状況のいずれかが発生する可能性があります。

  • ID 列に PRIMARY KEY 制約または UNIQUE 制約が設定されている場合、生成される ID 値と既存の値との競合が原因で、テーブルに対する後続の挿入操作でエラー メッセージ 2627 が生成されます。
  • PRIMARY KEY 制約または UNIQUE 制約が設定されていない場合、後続の挿入操作では重複した ID 値が挿入されます。

例外

次の表に、DBCC CHECKIDENT で現在の ID 値が自動的にリセットされないときの条件と、ID 値をリセットする方法を示します。

条件 リセット方法

現在の ID 値がテーブルの最大値より大きい。

  • DBCC CHECKIDENT (table_name, NORESEED) を実行して列の現在の最大値を判定し、その値を new_reseed_value として DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) コマンドに指定します。

または

  • new_reseed_value を非常に低い値に設定して DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) を実行した後、DBCC CHECKIDENT (table_name, RESEED) を実行して値を修正します。

すべての行がテーブルから削除されている。

new_reseed_value を開始値に設定して、DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) を実行します。

権限

呼び出し元はテーブルを所有しているか、固定サーバー ロール sysadmin、固定データベース ロール db_owner、または固定データベース ロール db_ddladmin のメンバである必要があります。

A. 必要に応じて現在の ID 値をリセットする

次の例では、必要に応じて、AdventureWorks データベース内の Employee テーブルの現在の ID 値をリセットします。

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

B. 現在の ID 値を報告する

次の例では、AdventureWorks データベース内の Employee テーブルの現在の ID 値を報告します。ID 値が正しくない場合でも、ID 値の修正は行いません。

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

C. 現在の ID 値を強制的に 30 に設定する

次の例では、Employee テーブルの EmployeeID 列の現在の ID 値を強制的に 300 に設定します。テーブルには既存の行があるため、次に挿入される行はその値として、現在の ID 値に 1 を足した 301 を使用します。1 は、この列に対して定義されている現在の増分値です。

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
GO

参照

関連項目

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
IDENTITY (プロパティ) (Transact-SQL)
USE (Transact-SQL)

その他の技術情報

ID 列のレプリケート

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2008 年 11 月 17 日

変更内容 :
  • new_reseed_value. の定義を修正。
  • 「解説」にシード値の変更に関するセクションを追加。

2006 年 4 月 14 日

追加内容 :
  • ID 値に ID 列の最大値より小さな値を設定したときに生じる結果についての説明を追加。
  • 「例外」セクションに、テーブルからすべての行が削除されている場合の説明を追加。

2005 年 12 月 5 日

追加内容 :
  • 引数 new_reseed_value の説明にテキストを追加。