![]() |
|
Подскажите по запросу sql | ☑ | ||
---|---|---|---|---|
0
rikodroo
28.03.13
✎
14:49
|
Из 1с (из ТЗ) формирую массив (не знаю как правильно назвать, м.б. кортежи) вида:
(1,пирог,200), (2,булка,20), (3,пироженка,60) В базе SQL у меня есть таблица MyTable с полями (id,tovar,price). Таблица эта не пустая, и я хочу эту талицу обновлять и дополнять новыми (id это ключевое поле - это код товара). У меня идея, что нужно из передаваемого из 1с массива кортежей сделать select-ом выборку и дальше использовать оператор merge, но не получается ничего (не удается такую выборку сделать). Вспомогательные таблицы на сервере SQL делать нельзя. подскажите как лучше и вообще возможноли такое реализовать? |
|||
1
ДенисЧ
28.03.13
✎
14:57
|
Если MySQL, то там есть update or insert оператор...
|
|||
2
sda553
28.03.13
✎
14:58
|
Очень просто,
1. в 1С обходишь циклом таблицу и формируешь текст из insertов которые потом пускаешь запросом к sql 2. Делаешь регистр под свой кортеж, в sql толкаешь функцию перекидывания из регистра в mytable |
|||
3
rikodroo
28.03.13
✎
15:02
|
(2) это получается, если в ТЗ 5000 строк, то регистр нужно делать и перезаписывать, а также построчно что-ли insert делать? Это же медленно будет очень.
|
|||
4
rikodroo
28.03.13
✎
15:06
|
(1) угу, операторы есть, но как записать в условии тогоже update , чтобы он пробегал по первому полю передаваемого массива кортежей?
|
|||
5
sda553
28.03.13
✎
15:07
|
Это не регистр делать, а так же insert писать, это или или.
5000 строк это как раз фигня. Т.е. РегистрСведений.Загрузить ну или какая то там функция у регистра есть загрузки из ТЗ. Потом вызываешь заготовленную exec merge_mytable которая сделает все остальное. Второй вариант, это тест sql запроса динамически сформировать из 5000 строк, это не так много |
|||
6
sda553
28.03.13
✎
15:09
|
А лучше вообще скажи зачем, наверняка велосипед для тебя уже изобретен.
|
|||
7
rikodroo
28.03.13
✎
15:13
|
(6) нету велосипеда. Обмен с сайтом такой нужен. Писать прямо в базу.
В РС писать проблем нет, непонятно только зачем, у меня в ТЗ есть все - оно храниться не должно и ненужно. А что должна делать ф-я exec merge_mytable? Мне веть как-то в запрос будет нужно всеравно передать строки этой ТЗ. |
|||
8
Sammo
28.03.13
✎
15:23
|
(30) Что значит долго? Какая скорость нужна?
|
|||
9
sda553
28.03.13
✎
15:29
|
(7) Потому что ТЗ оно только в памяти, а у РС есть таблица в БД. Поэтому строки передавать н очень тоти надо, а только делать что то вроде
insert into site.mytable select _fld023,_fld024,_fld025 from 1S._InfoReg1234 (nolock) и все. А обме с сайтом правильней делать через веб сервис этого сайта. Т.е. 1С подключается к веб сервису сайта, авторизуется и вызывает функцию передачи этой ТЗ. Сайт прнимает и на своем php или что там еще начинает все это в свою базу лить. Либо файловый обмен, т.е. у сайта есть фтп, туда выкладывает 1С файлики, сайт их по расписанию ест. Легко ловить косяки. |
|||
10
rikodroo
28.03.13
✎
15:38
|
(8) наибольшая
|
|||
11
rikodroo
28.03.13
✎
15:44
|
(9) ну insert и так нормально сделать можно типа:
INSERT INTO `MyTable` (id, tovar, price) VALUES (1,пирог,200), (2,булка,20), (3,пироженка,60) |
|||
12
rikodroo
28.03.13
✎
15:47
|
(9) таблица регистра это таблица скуля на котором 1с, а таблица приемник на другом сервере (mysql). Потому, тут тоже не все просто наверно?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |