none
IDENTITY属性のある列を保有するinsert into ~ select について RRS feed

  • 質問

  • IDENTITY属性のある列を保有するテーブルに対して以下のSQLを実行しましたが、
    エラーが発生して実行できません。

    Delete testDB.TestTable;
    SET IDENTITY_INSERT testDB.TestTable ON;
    INSERT INTO testDB.TestTable select * from testDB.TestTable2;
    SET IDENTITY_INSERT testDB.TestTable OFF;

    【エラー内容】
      列リストが使用されていて、IDENTITY_INSERT が ON のときに限り、
      テーブル 'testDB.TestTable' の ID 列に明示的な値を指定できます。

    下記のようなSQLは実行できます。
    SET IDENTITY_INSERT testDB.TestTable ON;
    insert into testDB.TestTable (ID) values (999);

    解決方法はありますでしょうか?

    環境はSQLServer2005 SP3 Enterpriseです。
    2009年3月26日 10:36

回答

  • これでどうでしょうか?

    SET IDENTITY_INSERT testDB.TestTable ON; 
    insert into testDB.TestTable (ID) select ID from testDB.TestTable2;
    • 回答としてマーク KRR2000 2009年3月27日 0:54
    2009年3月26日 13:33

すべての返信

  • これでどうでしょうか?

    SET IDENTITY_INSERT testDB.TestTable ON; 
    insert into testDB.TestTable (ID) select ID from testDB.TestTable2;
    • 回答としてマーク KRR2000 2009年3月27日 0:54
    2009年3月26日 13:33
  • 回答ありがとうございます。
    教えていただいたSQLは実行可能でした。
    エラー内容の【列リスト】の意味がわかりました。
    insert時に列を列挙しておかないといけないということですね。

    今やろうとしていたのはINFORMATION_SCHEMA.TABLESからテーブル一覧を取得し、
    それを元に動的にSQL(insert into ~ select)を作成して、
    同じ構造の別スキーマ(または別DB)から全テーブルのデータをinsertしようと思っていたのですが、
    カラムまで意識しする必要がると言うことですね。
    2009年3月27日 1:06