|
как мне выполнить ту же самую работу только на SQL, а не на 1с
|
Я
|
|
MAPATNK2 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 | создай глобальную временную таблицу и делай, че хочешь
|
MAPATNK2 2 - 05.10.16 - 09:16 | ( 1) Не подскажете как это сделать? Или ссылку на пример, если не сложно. Не так давно с 1с. Маловато знаю |
Ёпрст 4 - 05.10.16 - 09:20 | ( 2)
дык, смотри бол или в гугле : глобальная временная таблица - фас-фас |
MAPATNK2 5 - 05.10.16 - 09:26 | ( 4) Спасибо, с переменной разобрался. А как производить последующее сравнение строк в SQL не подскажете? |
Ёпрст 6 - 05.10.16 - 09:27 | ( 5) обычный update, если rowcount = 0 после этого, тогда инсерт |
MAPATNK2 7 - 05.10.16 - 09:42 | ( 6) А совпадения по каким атрибутам он ищет? Т.е У меня в таблице ID номенклатуры, наименование, услуга , родитель. Я могу что либо поменять в этой строчке в SQL е. Мне нужно, чтобы отбор происходил именно по ID номенклатуре. Т.е Если в этих двух таблицах есть одинаковые ID, то заменяем строки первой таблицы на вторую(временную), если совпадения нет, то нужно добавить не совпавшие строки в первую таблицу из временной. |
ERWINS 8 - 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) ну так и пиши, апдейт .. вере ид=ид.. |
ERWINS 10 - 05.10.16 - 09:50 | кроме того одним insert ом можно сразу вставить много строк
|
ERWINS 11 - 05.10.16 - 09:55 | можно первым SELECT выбрать все кода, в вторым update insert через ";" вставить.
|
МихаилМ 12 - 05.10.16 - 14:13 | ( 8) UPSERT только в сентябрьском 9.6 появился |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать
новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более
2000 человек.