自分用メモです。
SQL Server で IDENTITY 指定のID列を作成した場合、テーブル初期化とデータの入れなおしを行うと同時にシード値もリセットする場合には、「BCC CHECKIDENT」ステートメントを使用します。
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
・table_name:現在の ID 値をチェックする、ID列が含まれたテーブルの名前を指定します。
・new_reseed_value :ID 列の現在値として使用する新しい値を指定します。
上記ステートメントを実行後に挿入される最初の行の ID には、
○テーブル作成以降に行が作成されていない場合、または TRUNCATE TABLE ステートメントによってすべての行が削除されている場合には、new_reseed_value が使用されます。
○DELETE ステートメントにより既存行がすべて削除された場合を含む、既に行が挿入されている場合には、次に挿入される行には new_reseed_value + 増分値 が使用されます。
また、テーブルが空でない場合に、ID 値に ID 列の最大値より小さな値を設定すると、
○ID 列に PRIMARY KEY 制約または UNIQUE 制約が設定されている場合、生成される ID 値と既存の値との競合が原因で、テーブルに対する後続の挿入操作でエラーメッセージが生成されます。
○PRIMARY KEY 制約または UNIQUE 制約が設定されていない場合、後続の挿入操作で重複した ID 値が挿入されます。
意外と忘れがちですが、CHECKIDENT ステートメントを実行するには、
呼び出し元は、テーブルを所有しているか、sysadmin 固定サーバー ロール、db_owner 固定データベース ロール、または db_ddladmin 固定データベース ロールのメンバーである必要があります。
参照元:MSDN
DBCC CHECKIDENT (Transact-SQL)
コメントを残す
コメントを投稿するにはログインしてください。