SQLSever

【SQLServer】エラー「identity insertがOFFに設定されているときは、テーブルのID列を明示的な値を挿入できません」が出たときの対処法

SQLServerを使っていて、以下のようなエラーが発生しかした。

 エラーメッセージ
identity insertがOFFに設定されているときは、テーブルのID列を明示的な値を挿入できません

今回は上記のエラーメッセージが出た時の対処法をまとめたので、ここにメモしておきます。

 

原因

上記のエラーの原因は、自動発番のidentityプロパティを設定しているカラムに対して、INSERTやUPDATEする際にカラムを指定した時に発生します

自動発番を設定したカラムはいじることができない制約があるためです。

どうしてもidentityプロパティのカラムについて変更を行いたい場合はいくつか方法があります。

 

対処法

IDENTITY_INSERTプロパティをON

IDENTITY_INSERT が OFFになっている場合は、ONに変更することでそのままINSERTが可能になります。

-- IDENTITY_INSERTプロパティをONに変更
SET IDENTITY_INSERT SAMPLE_TABLE ON;
-- 再度対象テーブルにデータを登録
INSERT INTO SAMPLE_TABLE VALUES(・・・);

identityプロパティをリセット/変更する

identityプロパティの発番する値を変更してINSERT方法です。

--SAMPLE_TABLEテーブルのidentityの現在値を「50」に設定
DBCC CHECKIDENT('SAMPLE_TABLE', RESEED, 50)
-- 再度対象テーブルにデータを登録
INSERT INTO SAMPLE_TABLE VALUES( 50, ・・・);

以上です。

-SQLSever