Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

как мне выполнить ту же самую работу только на SQL, а не на 1с

как мне выполнить ту же самую работу только на 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 человек.
Рекламное место пустует