9

我正在尝试使用 SQLite3 shell 在某个表中插入 15530 记录,但我得到了那个错误,我搜索了默认为 500 的解决方案 SQLITE_MAX_COMPOUND_SELECT 是原因,但我不知道如何使用 Shell 更改它。

“错误:复合 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

多值 INSERT INTO 语法是在 SQLite 3.7.11 中引入的,因此原始语法在最新版本的 SQLite 上很好。在旧版本上,您可以使用另一种语法

但是,SQLITE_MAX_COMPOUND_SELECT 在运行时不能提高限制,因此您需要将插入分成每批 500 行。这将比每个查询插入一行更有效。例如

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 回答