Проблема SQLite при вставке большого количества записей

Я пытаюсь вставить запись 15530 в определенную таблицу с помощью оболочки SQLite3 , но я получаю эту ошибку , я искал решение SQLITE_MAX_COMPOUND_SELECT, которое по умолчанию равно 500, но я не знаю, как изменить его с помощью оболочки.

"ошибка: слишком много терминов в составном выборе"

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');

2 ответов


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


многозначная вставка в синтаксис была введено в 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;