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 カラムだったとします。
この Student テーブルに StudentID を指定してデータをインサートしようとすると、以下のようなエラーになります。
次のように、SET ステートメントを使って Student テーブルの IDENTITY_INSERT を ON にしてからだとインサート可能です。
ちなみに、IDENTITY_INSERT をON にして IDENTITY カラムにインサートした値が、今までの IDENTITY の値よりも大きい場合、SQL Server が持っている IDENTITY の現在の値がその最大値で置き換えられ、次回の自動採番時には、その値を元に次の番号が自動設定されます。
また、セッション内で、IDENTITY_INSERT を ON にできるテーブルはひとつだけですので、スクリプトを書く時には気をつけてくださいね。