Множественный update sql из 1с

1. user1840899 02.08.23 10:05 Сейчас в теме
Делаю множественный ins ert и update в одной строке, для сокрашения кода и его оптимизации. Сделал запрос и засунул данные в массив и с помощью его должен заполнять строки в sql, но выдает ошибку

{ОбщийМодуль.ЭкспортВMySQL.Модуль(30)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 8.0(a) Driver][mysqld-8.0.30]Column count doesn't match val ue count at row 1

Пишет, что разные количества стобцов, но все верно.
Подскажите в чем проблема
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user-z99999 72 02.08.23 10:37 Сейчас в теме
(1)
Прежде чем изгаляться оптимизацией, сделай просто инсерт в таблицу.

Как получиться, тогда вернешь первоначальный вариант.
Вначале, пойми в чём ошибка.
4. user1840899 02.08.23 10:40 Сейчас в теме
(2) Я уже делал инсерт и апдейт отдельно, все прекрасно работало
3. RustamZz 02.08.23 10:39 Сейчас в теме
(1) В INSERT 2 поля, а в VALUES не 2 поля. Вот и недоволен драйвер.
5. nomad_irk 80 02.08.23 10:47 Сейчас в теме
(1)
Пишет, что разные количества стобцов, но все верно.

Если пишет, значит так оно и есть.

На второй итерации цикла по выбоке в массиве будет 4 элемента и вы это каким-то чудесным образом пытаетесь запихать в два поля таблицы.
Т.е. текст запроса на второй итерации цикла будет иметь вид:
INS ERT IN TO <TableName>
(id_tag, id_events) VALUES(Значение1, Значение2, Значение3, Значение4) ON DUPLICATE KEY UPDATE......

а какое количество элементов в выборке - известно только вам.
6. user1840899 02.08.23 10:59 Сейчас в теме
(5)Так там не в цикле стоит
7. nomad_irk 80 02.08.23 11:01 Сейчас в теме
(6)что значит не в цикле? В цикле вы набиваете массив данными
Результирующая строка - за циклом, она будет содержать столько пар значений, сколько элементов в выборке.


INSERT не умеет разобраться со всеми значениями самостоятельно и выполнится один раз
нужно для каждой комбинации значений выполнять свой INSERT
Прикрепленные файлы:
8. laperuz 47 02.08.23 11:21 Сейчас в теме
(6)Замените МассивСлов.Добавить(Выборка.id_tag) на МассивСлов.Добавить("(" + Выборка.id_tag)
а МассивСлов.Добавить(Выборка.id_events) на МассивСлов.Добавить("," + Выборка.id_events + ")")

Тогда будет строка вида insert ((значение1, значение2), (значение3, значение4))
Так должно сработать
9. nomad_irk 80 02.08.23 11:52 Сейчас в теме
(8) В 1к текста сколько влезет элементов выборки? :)
10. laperuz 47 02.08.23 11:54 Сейчас в теме
(9) А это уже головная боль ТСа:)
11. user1973639 02.08.23 12:22 Сейчас в теме
Можно сохранить в фай и через BULK INSERT пакетно грузить.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот