|
как мне выполнить ту же самую работу только на SQL, а не на 1с | ☑ | ||
---|---|---|---|---|
0
MAPATNK2
naïve
05.10.16
✎
09:14
|
Здравствуйте. Такой вопрос. Писал обработку, которая выгружает всю номенклатуру в базу sql . Вот таким способом:
Соединение = Новый COMОбъект("ADODB.Connection"); СтрокаСоединения = "DSN=PostgreSQL35W;DATABASE=Trade;SERVER=localhost;PORT=5432;UID=postgres;PWD=12345678;CA=d;A6=;A7=100;B0=255;B1=8190;BI=0;C2=dd_;CX=1c205008b;A1=7.4;"; Соединение.ConnectionString = (СтрокаСоединения); Попытка Соединение.Open(); Сообщить("База подключена!!!"); Исключение Сообщить("Не могу подключиться к базе!!!"); КонецПопытки; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.Услуга, | Номенклатура.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура"; Результат = Запрос.Выполнить().Выгрузить(); я=0; Запрос="SELECT * FROM cls_nomenklatura"; ТЗ=RunQuery(Запрос); Для каждого стр Из Результат Цикл //Для каждого строчка Из ТЗ Цикл v = ТЗ.Найти(стр.Код,"nom_id"); Если v=0 Тогда f="INSERT INTO cls_nomenklatura (nom_id, nomenklatura_name, usluga, parrents) VALUES ('"+стр.Код+"','"+стр.Наименование+"','"+стр.Услуга+"','"+стр.Родитель+"')"; Соединение.execute(f); ИначеЕСЛИ v <> 0 тогда m = "update cls_nomenklatura set usluga='"+стр.Услуга+"',nomenklatura_name = '"+стр.Наименование+"',parrents = '"+стр.Родитель+"' where nom_id='"+стр.Код+"'"; Соединение.execute(m); КонецЕсли; //КонецЦикла; КонецЦикла; Соединение.Close(); Теперь появилась необходимость использовать вложенные процедуры. Не подскажете как мне выполнить ту же самую работу только на SQL, а не на 1с. тоесть передать временную таблицу в SQL, и обработать ее на совпадения уже там? |
|||
1
Ёпрст
05.10.16
✎
09:16
|
создай глобальную временную таблицу и делай, че хочешь
|
|||
2
MAPATNK2
naïve
05.10.16
✎
09:16
|
(1) Не подскажете как это сделать? Или ссылку на пример, если не сложно. Не так давно с 1с. Маловато знаю
|
|||
4
Ёпрст
05.10.16
✎
09:20
|
(2)
дык, смотри бол или в гугле : глобальная временная таблица - фас-фас |
|||
5
MAPATNK2
naïve
05.10.16
✎
09:26
|
(4) Спасибо, с переменной разобрался. А как производить последующее сравнение строк в SQL не подскажете?
|
|||
6
Ёпрст
05.10.16
✎
09:27
|
(5) обычный update, если rowcount = 0 после этого, тогда инсерт
|
|||
7
MAPATNK2
naïve
05.10.16
✎
09:42
|
(6) А совпадения по каким атрибутам он ищет? Т.е У меня в таблице ID номенклатуры, наименование, услуга , родитель. Я могу что либо поменять в этой строчке в SQL е. Мне нужно, чтобы отбор происходил именно по ID номенклатуре. Т.е Если в этих двух таблицах есть одинаковые ID, то заменяем строки первой таблицы на вторую(временную), если совпадения нет, то нужно добавить не совпавшие строки в первую таблицу из временной.
|
|||
8
ERWINS
05.10.16
✎
09:49
|
посмотри какая версия SQL
есть ли там UPSERT This page summarizes the INSERT ... ON CONFLICT UPDATE patch. This feature is popularly known as "UPSERT". |
|||
9
Ёпрст
05.10.16
✎
09:50
|
(7) ну так и пиши, апдейт .. вере ид=ид..
|
|||
10
ERWINS
05.10.16
✎
09:50
|
кроме того одним insert ом можно сразу вставить много строк
|
|||
11
ERWINS
05.10.16
✎
09:55
|
можно первым SELECT выбрать все кода, в вторым update insert через ";" вставить.
|
|||
12
МихаилМ
05.10.16
✎
14:13
|
(8) UPSERT только в сентябрьском 9.6 появился
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |