Как одним запросом вставить несколько строк в таблицу SQlite #773936


#0 by FobusVGrunt
Нужно добавлять строки в таблицу, метод УложитьТЗ не катит, он удаляет таблицу перед добавлением. делать в цикле по одной строке "INSERT", очень медленно. Пробовал "INSERT INTO a_L_S47 (IDOLD,ID) VALUES (1,2),(100,200),....". Выдает ошибку на синтаксис ",". Как в SQLite одним запросом можно добавить много строк?
#1 by Волшебник
SQLite не умеет вставлять несколько строк
#2 by Sserj
выдает правильную ошибку, скорей всего лишняя запятая после последних скобок валуесов.
#3 by FobusVGrunt
В 1С-ке, выдает ошибку, а через SQLiteExpert, без вопросов работает
#4 by FobusVGrunt
"INSERT INTO a_L_S47 (IDOLD,ID) VALUES (1,2),(100,200)" - в SQLiteExpert добавляет две строки, через 1С, точно такой запрос пишет:  <near ",": syntax error>
#5 by youalex
insert into [test] ([f1]) select 1 union  select 2;
#6 by Chieftain
УложитьТЗ + Insert Into Select From
#7 by FobusVGrunt
Спасибо, так уже попробовал работает с 1С, но интересно чего один и тот же запрос в одной программе работает, а во второй нет
#8 by FobusVGrunt
имеется ввиду уложить во временную, а потом от туда в основную?
#9 by Chieftain
да, как вариант
#10 by FobusVGrunt
походу остается только как в , в - есть ограничения походу на кол-во SELECT в запросе, так если много записей выдает ошибку (too many terms in compound  SELECT)
#11 by Chieftain
Можно разбить по 500 записей))
#12 by FobusVGrunt
Неее оптимально в . Скинул во временную таблицу, если транзакция успешная скопировал в основную.
#13 by Djelf
Движок sqlite в 1sqlite 1.0.2.6 - 3.7.10, а поддержка вставки нескольких строк была добавлена в движке 3.7.11
#14 by trdm
BEGIN; INSERT INTO a_L_S47 (IDOLD,ID) VALUES ,; INSERT INTO a_L_S47 (IDOLD,ID) VALUES ,; COMMIT;
#15 by trdm
Query succeeded: create table a_L_S47 (IDOLD int ,ID int) Query succeeded: BEGIN; INSERT INTO a_L_S47 (IDOLD,ID) VALUES ,; INSERT INTO a_L_S47 (IDOLD,ID) VALUES ,; COMMIT; -- Нормально пашет.
#16 by FobusVGrunt
по синтаксису значения в одних скобках должны быть не "VALUES ,", а "VALUES (1,100)"
#17 by FobusVGrunt
и у меня что-то не пашет, эта конструкция
#18 by FobusVGrunt
Спасибо, теперь понятно почему в 1С  не работает такая конструкция
#19 by Djelf
Решение правильное. Самый быстрый способ! Хинт - разбивать на порции ~10000 строк (подбирать в зависимости от объема 1й строки). Тогда можно и вывести какой то прогрессбарчик и работает быстрее.
#20 by trdm
Да, не пашет. пользовался приблудой типа QA - она по синтаксису прошла, но дело не сделала.
#21 by trdm
да и конструкция 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 by FobusVGrunt
Что такое QA ?
#23 by Ёпрст
квери анализёр
#24 by Djelf
Да, есть такое! Обрабатывается только первый запрос перед ';' Мастер чуток недокурил интерфейс. sqlite3_prepare_v2 надо запускать в цикле т.к. он кушает только 1 запрос за проход. Ну а поскольку мне это не нравится то Фиксед! 1sqlite 3.8.11.bf8 Расшифровка explain для 2х запросов подряд не работает. Буду думать.
#25 by Chieftain
чую со ссылочкой ты ошибся, по теме Tool_1CD вообще никаким боком
#26 by Djelf
А при чем тут вообще Tool_1CD? оО Это относится к 1sqlite. Было в удивление про хрень. Хрень была изучена и частично излечена. Не попал ответом в заголовок темы, но попал в ответвление от вопроса. Что не так?
#27 by Chieftain
Из твоего поста следует, что ты изучил проблему, нашел ей решение. Есть смысл полагать, что ты качнул с репа исходники, поправил и собрал. Написал "Фиксед!1sqlite 3.8.11.bf8" и указал ссылку. Но ссылка твоя ведет почему-то на скачивание "Tool_1CD.zip". Так что все так!
#28 by Djelf
Ой... Спасибо! Ну так бы сразу и написал, а то я голову ломаю... дабл фиксед ;) P.S. после последней ';' ни пробелов ни комментариев быть не должно. Заметил только сейчас, возможно завтра доделаю, чтобы не влияло.
#29 by trdm
Я пользуюсь чуток доработанным примером QA из этой книжки:
#30 by Djelf
А я подумал QA в 1с`ке. Эх... рано радовался. В варианте выполняется только последний запрос. Надо рисовать хранение и обработку всей цепочки подготовленных запросов. Это займет какое то время.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С