SQL Server のレコードコピーとIDENTITY_INSERT
SQL Serverでのテーブルコピーは
SELECT * INTO new_tbl FROM old_tbl;
レコードコピーは
INSERT INTO to_tbl SELECT * FROM from_tbl;
ところでSQL ServerではIDENTITYっていうもんがあって
IDENTITYを持つカラムに明示的に値を入れる場合には
SET IDENTITY_INSERT ON INSERT INTO target_tbl(***, ***, ***,,) VALUES (***, ***, ***,,); SET IDENTITY_INSERT OFF
とするのだが
IDENTITYのあるテーブルにレコードコピーする際
SET IDENTITY_INSERT ON INSERT INTO to_tbl SELECT * FROM from_tbl; SET IDENTITY_INSERT OFF
こんなんやると怒られる。
以下のように書き換える。
SET IDENTITY_INSERT ON INSERT INTO to_tbl(***, ***, ***,,) SELECT * FROM from_tbl; SET IDENTITY_INSERT OFF
INSERT INTO での挿入先でのカラムの指定はしておこうというそういう話。
そもそものレコードコピーからそうすべきな気もする。