|
v7: Как одним запросом вставить несколько строк в таблицу SQlite | ☑ | ||
---|---|---|---|---|
0
FobusVGrunt
06.06.16
✎
16:15
|
Нужно добавлять строки в таблицу, метод УложитьТЗ не катит, он удаляет таблицу перед добавлением. делать в цикле по одной строке "INSERT", очень медленно. Пробовал "INSERT INTO a_L_S47 (IDOLD,ID) VALUES (1,2),(100,200),....". Выдает ошибку на синтаксис ",". Как в SQLite одним запросом можно добавить много строк?
|
|||
1
Волшебник
модератор
06.06.16
✎
16:17
|
SQLite не умеет вставлять несколько строк
|
|||
2
Sserj
06.06.16
✎
16:19
|
http://www.sqlite.org/lang_insert.html
выдает правильную ошибку, скорей всего лишняя запятая после последних скобок валуесов. |
|||
3
FobusVGrunt
06.06.16
✎
16:21
|
(1) В 1С-ке, выдает ошибку, а через SQLiteExpert, без вопросов работает
|
|||
4
FobusVGrunt
06.06.16
✎
16:25
|
"INSERT INTO a_L_S47 (IDOLD,ID) VALUES (1,2),(100,200)" - в SQLiteExpert добавляет две строки, через 1С, точно такой запрос пишет: <near ",": syntax error>
|
|||
5
youalex
06.06.16
✎
16:32
|
(0)
insert into [test] ([f1]) select 1 union select 2; |
|||
6
Chieftain
06.06.16
✎
16:33
|
(0) УложитьТЗ + Insert Into Select From
|
|||
7
FobusVGrunt
06.06.16
✎
16:35
|
(5) Спасибо, так уже попробовал работает с 1С, но интересно чего один и тот же запрос в одной программе работает, а во второй нет
|
|||
8
FobusVGrunt
06.06.16
✎
16:37
|
(6) имеется ввиду уложить во временную, а потом от туда в основную?
|
|||
9
Chieftain
06.06.16
✎
16:39
|
(8) да, как вариант
|
|||
10
FobusVGrunt
06.06.16
✎
16:55
|
походу остается только как в (6), в (5) - есть ограничения походу на кол-во SELECT в запросе, так если много записей выдает ошибку (too many terms in compound SELECT)
|
|||
11
Chieftain
06.06.16
✎
17:02
|
(10) Можно разбить по 500 записей))
|
|||
12
FobusVGrunt
06.06.16
✎
17:16
|
(11) Неее оптимально в (6). Скинул во временную таблицу, если транзакция успешная скопировал в основную.
|
|||
13
Djelf
06.06.16
✎
17:38
|
(0) Движок sqlite в 1sqlite 1.0.2.6 - 3.7.10, а поддержка вставки нескольких строк была добавлена в движке 3.7.11
|
|||
14
trdm
06.06.16
✎
17:59
|
BEGIN;
INSERT INTO a_L_S47 (IDOLD,ID) VALUES (1),(100); INSERT INTO a_L_S47 (IDOLD,ID) VALUES (2),(200); COMMIT; |
|||
15
trdm
06.06.16
✎
18:04
|
Query succeeded:
create table a_L_S47 (IDOLD int ,ID int) Query succeeded: BEGIN; INSERT INTO a_L_S47 (IDOLD,ID) VALUES (1),(100); INSERT INTO a_L_S47 (IDOLD,ID) VALUES (2),(200); COMMIT; -- Нормально пашет. |
|||
16
FobusVGrunt
06.06.16
✎
22:24
|
(15) по синтаксису значения в одних скобках должны быть не "VALUES (1),(100)", а "VALUES (1,100)"
|
|||
17
FobusVGrunt
06.06.16
✎
22:25
|
(15) и у меня что-то не пашет, эта конструкция
|
|||
18
FobusVGrunt
06.06.16
✎
22:25
|
(13) Спасибо, теперь понятно почему в 1С не работает такая конструкция
|
|||
19
Djelf
06.06.16
✎
23:38
|
(12) Решение правильное. Самый быстрый способ!
Хинт - разбивать на порции ~10000 строк (подбирать в зависимости от объема 1й строки). Тогда можно и вывести какой то прогрессбарчик и работает быстрее. |
|||
20
trdm
07.06.16
✎
07:53
|
(17) Да, не пашет.
пользовался приблудой типа QA - она по синтаксису прошла, но дело не сделала. |
|||
21
trdm
07.06.16
✎
07:56
|
да и конструкция
BEGIN; INSERT INTO a_L_S47 (IDOLD,ID) VALUES (1,100); INSERT INTO a_L_S47 (IDOLD,ID) VALUES (2,200); COMMIT; вставляет 1 строку через QA. Хрень какая-то.. |
|||
22
FobusVGrunt
07.06.16
✎
13:41
|
(21) Что такое QA ?
|
|||
23
Ёпрст
07.06.16
✎
14:01
|
(22) квери анализёр
|
|||
24
Djelf
07.06.16
✎
23:26
|
(21) Да, есть такое! Обрабатывается только первый запрос перед ';'
Мастер чуток недокурил интерфейс. sqlite3_prepare_v2 надо запускать в цикле т.к. он кушает только 1 запрос за проход. Ну а поскольку мне это не нравится то
Фиксед! 1sqlite 3.8.11.bf8 https://cloud.mail.ru/public/86LY/qr1G1waT5 Расшифровка explain для 2х запросов подряд не работает. Буду думать. |
|||
25
Chieftain
08.06.16
✎
00:20
|
(24) чую со ссылочкой ты ошибся, по теме Tool_1CD вообще никаким боком
|
|||
26
Djelf
08.06.16
✎
01:21
|
(25) А при чем тут вообще Tool_1CD? оО
Это относится к 1sqlite. Было в (21) удивление про хрень. Хрень была изучена и частично излечена. Не попал ответом в заголовок темы, но попал в ответвление от вопроса. Что не так? |
|||
27
Chieftain
08.06.16
✎
02:31
|
(26) Из твоего поста следует, что ты изучил проблему, нашел ей решение. Есть смысл полагать, что ты качнул с репа исходники, поправил и собрал. Написал "Фиксед!1sqlite 3.8.11.bf8" и указал ссылку. Но ссылка твоя ведет почему-то на скачивание "Tool_1CD.zip".
Так что все так! |
|||
28
Djelf
08.06.16
✎
02:45
|
Ой... Спасибо!
Ну так бы сразу и написал, а то я голову ломаю... дабл фиксед ;) https://cloud.mail.ru/public/9AU9/arRAT8Xx6 P.S. после последней ';' ни пробелов ни комментариев быть не должно. Заметил только сейчас, возможно завтра доделаю, чтобы не влияло. |
|||
29
trdm
08.06.16
✎
12:58
|
(24) Я пользуюсь чуток доработанным примером QA из этой книжки:
https://www.ozon.ru/context/detail/id/4030253/ https://yadi.sk/d/vikpGmjzsLnuw |
|||
30
Djelf
08.06.16
✎
15:24
|
(29) А я подумал QA в 1с`ке.
Эх... рано радовался. В варианте (24) выполняется только последний запрос. Надо рисовать хранение и обработку всей цепочки подготовленных запросов. Это займет какое то время. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |