9

SQLite3シェルを使用して特定のテーブルに15530レコードを挿入しようとしていますが、そのエラーが発生します。デフォルトで500になっているソリューションSQLITE_MAX_COMPOUND_SELECTを検索しましたが、シェルを使用して変更する方法がわかりません。

「エラー:複合SELECTの用語が多すぎます」

http://desmond.imageshack.us/Himg861/scaled.php?server=861&filename=sqlite.jpg&res=landing

INSERT INTO table_name (my_id, my_name) VALUES
(1, 'Aaliyah'),
(2, 'Alvar Aalto'),
(3, 'Willie Aames'),
...
(15530, 'name');
4

2 に答える 2

14

複数値のINSERTINTO構文はSQLite3.7.11で導入されたため、SQLiteの最近のバージョンでは元の構文で問題ありません。古いバージョンでは、別の構文を使用できます。

ただし、SQLITE_MAX_COMPOUND_SELECT 実行時に制限を引き上げることはできないため、挿入をそれぞれ500行のバッチに分割する必要があります。これは、クエリごとに1つの行を挿入するよりも効率的です。例えば

BEGIN;
INSERT INTO table_name (id, name) VALUES (1, 'foo'), ..., (500, 'bar');
INSERT INTO table_name (id, name) VALUES (501, 'baz'), ..., (1000, 'zzz');
...
COMMIT;
于 2013-01-10T17:36:00.027 に答える
5

INSERT INTOそのようには機能しません。

これを試して:

BEGIN TRANSACTION
INSERT INTO author (author_id, author_name) VALUES (1, 'Aaliyah')
INSERT INTO author (author_id, author_name) VALUES (2, 'Alvar Aalto')
INSERT INTO author (author_id, author_name) VALUES (3, 'Willie Aames')
...
END TRANSACTION

http://www.sqlite.org/lang_insert.html

于 2012-04-10T06:03:24.457 に答える