SQLServerで、テーブルにデータを挿入する際のお話です。
ふつう、IDにした列は自動で採番されるので、そこに自分で決めた数字を使ってデータを挿入することってできませんよね。
たとえ、それらがいずれも、その挿入するデータの中で一意の数字になっていたり、既存のデータを加味しても一意になっている、というケースでも。
こんな感じに無理やりデータを入れようとすると、
INSERT INTO z_T_ID_Btn
(ID_Btn, Color)
VALUES
(6, 'gold')
INSERT INTO z_T_ID_Btn
(ID_Btn, Color)
VALUES
(6, 'gold')
INSERT INTO z_T_ID_Btn (ID_Btn, Color) VALUES (6, 'gold')
こんなメッセージが。
メッセージ 544、レベル 16、状態 1、行 1
IDENTITY_INSERT が OFF に設定されているときは、テーブル ‘z_T_ID_Btn’ の ID 列に明示的な値を挿入できません。
結構丁寧に、エラー文を排出してくれているので、対策もわかっちゃうのですが・・・。
はい。
IDENTITY_INSERT を ON にしてやればいいんですね。
SET IDENTITY_INSERT z_T_ID_Btn ON;
INSERT INTO z_T_ID_Btn
(ID_Btn, Color)
VALUES
(6, 'gold')
SET IDENTITY_INSERT z_T_ID_Btn OFF;
SET IDENTITY_INSERT z_T_ID_Btn ON;
INSERT INTO z_T_ID_Btn
(ID_Btn, Color)
VALUES
(6, 'gold')
SET IDENTITY_INSERT z_T_ID_Btn OFF;
SET IDENTITY_INSERT z_T_ID_Btn ON; INSERT INTO z_T_ID_Btn (ID_Btn, Color) VALUES (6, 'gold') SET IDENTITY_INSERT z_T_ID_Btn OFF;
そのままにしておくと面倒なことが起きるので、その作業が終わったら OFF にしておくことをお勧めします。
一点注意すべき点があるとすれば、この作業の後、自動採番は、このID列のなかの一番大きな数字の次の数から始まります。
ガードを下げさせて半ば強引にデータを挿入させるような感じになるので、多用することは無いと思いますが、出先のDBのテーブルのデータをごそっと塗り替えたいケースとか、あるにはあるので。