T-SQL: IDENTITY カラムにデータを指定してインサートする方法

IDENTITY カラム (ID 列) にデータを指定してインサートする

テーブルにデータをインサートした際に、自動的に連番を振らせたい時、カラムにIDENTITYプロパティーを設定しますよね。

普通に使っている時は問題ありませんが、データ移行時等、データをコピーしたりしたい時など、明示的に IDENTITY カラム ( ID 列) に値を指定してレコードを作成したい時があるかもしれません。

今回は IDENTITY カラムにデータを明示的に指定してインサートする方法をご紹介します。

IDENTITY_INSERT を ON に設定する

IDENTITY カラムにデータを明示的に指定してインサートできるようにする為には、SET ステートメントで IDENTITY_INSERT を ON にします。

構文は以下の通りで、IDENTITY が設定されたカラムを持つテーブル名を指定します。

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }


例えば、以下のような Student テーブルがあり、StudentID が IDENTITY カラムだったとします。

IDENTITY カラムにデータを指定してインサートする 1


この Student テーブルに StudentID を指定してデータをインサートしようとすると、以下のようなエラーになります。

IDENTITY カラムにデータを指定してインサートする 2


次のように、SET ステートメントを使って Student テーブルの IDENTITY_INSERT を ON にしてからだとインサート可能です。

SET IDENTITY_INSERT Student ON;

IDENTITY カラムにデータを指定してインサートする 3


ちなみに、IDENTITY_INSERT をON にして IDENTITY カラムにインサートした値が、今までの IDENTITY の値よりも大きい場合、SQL Server が持っている IDENTITY の現在の値がその最大値で置き換えられ、次回の自動採番時には、その値を元に次の番号が自動設定されます。

IDENTITY カラムにデータを指定してインサートする 4

また、セッション内で、IDENTITY_INSERT を ON にできるテーブルはひとつだけですので、スクリプトを書く時には気をつけてくださいね。

© 2010-2024 SQL Server 入門