♻
IDENTITY列の値の変更方法
既存のテーブルに設定されているIDENTITY列の値を変更する(再設定する)方法を2つご紹介します。
①DBCCコマンド
基本構文
基本的な構文
DBCC CHECKIDENT (table_name, { NORESEED | RESEED }, reseed_value)
- table_name : IDENTITY列が属するテーブルの名前。
- NORESEED | RESEED : シーケンスの再設定を行うかどうかを指定します。NORESEEDは再設定を行わないオプションで、RESEEDは再設定を行うオプションです。
- reseed_value : シーケンスの新しい開始値を指定します。
サンプルクエリー
以下のクエリーを実行することで、SampleTableというテーブルのIDENTITY列の値を1000に再設定できます。
※このとき、再設定する値は、現在の最大のIDENTITY値よりも大きくする必要があるのでご注意ください。
DBCC CHECKIDENT (SampleTable, RESEED, 1000)
②ALTER SEQUENCE
シーケンスが作成されている場合、ALTER SEQUENCEを用いることでシーケンス値を再設定できます。
基本構文
ALTER SEQUENCE sequence_name RESTART WITH reseed_value
- sequence_name : データベースに認識されるシーケンスの一意な名前を指定します。
- reseed_value : シーケンスの新しい開始値を指定します。
サンプルクエリー
たとえば、SampleTableというテーブルにSampleSequenceというシーケンスが設定されているとします。
その場合、以下のクエリーを実行することで、シーケンスの値を1000に再設定できます。
ALTER SEQUENCE SampleSequence RESTART WITH 1000
おまけ
以下のクエリーを実行することで、IDENTITY列の最大値を取得し、それに+1した値でシーケンス値を更新できます。
declare @MaxId int;
declare @sql nvarchar(max);
select @MaxId = (max(id) + 1) from SampleTable;
set @sql = 'ALTER SEQUENCE SampleSequence RESTART WITH ' + CAST(ISNULL(@MaxId, 0) + 1 AS nvarchar(max));
EXEC(@sql);
Discussion