IDENTITY列の値の変更方法

2024/03/07に公開

既存のテーブルに設定されている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