データベース new.dbのテーブル table1に別のデータベースold.dbのテーブルtable1のデータを丸ごとコピーしたい場合*1、SQLiteではnew.dbを開いた後、ATTACH DATABASE でold.dbをアタッチすることでスムーズに処理することができた。各table1はDB名を接頭辞としてmain.table1、old.table1という風にしてアクセスする。後はINSERT文を発行するだけだが、PRIMARY KEYが指定されている列をINSERTしようとするとエラーが発生するので列名を指定する必要があった。最後はDETACH DATABASEして処理完了である。
c:sql>sqlite3.exe new.db sqlite> ATTACH DATABASE 'old.db' AS old; sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main c:sqlnew.db 2 old c:sqlold.db sqlite> BEGIN; sqlite> INSERT INTO main.table1(c1,c2,c3) SELECT c1,c2,c3 FROM old.table1; sqlite> COMMIT; sqlite> DETACH DATABASE old; |
関連:SQLite Query Language: ATTACH DATABASE