Импорт данных в таблицу SQL (оптимизация)
По теме из базы знаний
- PowerTools: Инструменты администратора 1С 8.3
- Чем PostgreSQL может быть полезен разработчику 1С
- Почему PostgreSQL не лучше MS SQL
- Применение 1С:Аналитики и Дата акселератора, или Как получить в 1С прозрачность и скорость обработки данных для прямого доступа и контроля руководителя
- Мастер-класс: нагрузочный тест на 3 тыс. пользователей на PostgreSQL
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
"прямым" - это как? INSERT(...) INTO XXX VALUES(...)?
есть синтаксис
INSERT(...) INTO XXX SELECT ...
и
BULK INSERT, но для "булка" надо сначала данные в текстовый файл записать и хелп внимательно прочитать....
а скажи мне плиз, как ты из 8-ки T-SQL вызываешь? - мне чета стало оЧЧЧень интересно!!!!!
есть синтаксис
INSERT(...) INTO XXX SELECT ...
и
BULK INSERT, но для "булка" надо сначала данные в текстовый файл записать и хелп внимательно прочитать....
а скажи мне плиз, как ты из 8-ки T-SQL вызываешь? - мне чета стало оЧЧЧень интересно!!!!!
Для таких вещей нужно использовать ADO ниже пример, который упихивает Таблицу значений в sql таблицу , синхонизируясь по именм колонок.
Command = Новый COMОбъект("ADODB.Recordset");
Command.CursorLocation=3;
Connection.DefaultDatabase = "test";
Command.Open(NameTable,Connection,3,4,2);
СчетчикЛ = 1;
Вр = Таблица.Количество();
Состояние("Загр. "+NameTable+" " + Строка(Счетчик));
Для i=0 По Таблица.Количество() -1 Цикл
Command.AddNew();
Для j=0 По Таблица.Колонки.Количество() -1 Цикл
Value = Таблица[i][j];
Если не обЗначениеНеЗаполнено(Value) Тогда
//Сообщить(""+Таблица.Колонки[j].Имя+" ["+Value+"]");
Если (ТипЗнч(Value) = Тип("Число")) или (ТипЗнч(Value) = Тип("Дата")) тогда
Command.Fields(Таблица.Колонки[j].Имя).Value=Value;
Иначе
// Сообщить(Таблица.Колонки[j].Имя);
Попытка
Command.Fields(Таблица.Колонки[j].Имя).Value=Строка(Value);
Исключение
Сообщить(Таблица.Колонки[j].Имя+ " "+Строка(Value));
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СчетчикЛ = 3000 Тогда
СчетчикЛ = 0;
Command.UpdateBatch();
Счетчик = Счетчик + 1;
Иначе
СчетчикЛ = СчетчикЛ + 1;
КонецЕсли;
КонецЦикла;
Попытка
Command.UpdateBatch();
Command.Close();
Исключение
Сообщить(NameTable);
КонецПопытки;
Command = Новый COMОбъект("ADODB.Recordset");
Command.CursorLocation=3;
Connection.DefaultDatabase = "test";
Command.Open(NameTable,Connection,3,4,2);
СчетчикЛ = 1;
Вр = Таблица.Количество();
Состояние("Загр. "+NameTable+" " + Строка(Счетчик));
Для i=0 По Таблица.Количество() -1 Цикл
Command.AddNew();
Для j=0 По Таблица.Колонки.Количество() -1 Цикл
Value = Таблица[i][j];
Если не обЗначениеНеЗаполнено(Value) Тогда
//Сообщить(""+Таблица.Колонки[j].Имя+" ["+Value+"]");
Если (ТипЗнч(Value) = Тип("Число")) или (ТипЗнч(Value) = Тип("Дата")) тогда
Command.Fields(Таблица.Колонки[j].Имя).Value=Value;
Иначе
// Сообщить(Таблица.Колонки[j].Имя);
Попытка
Command.Fields(Таблица.Колонки[j].Имя).Value=Строка(Value);
Исключение
Сообщить(Таблица.Колонки[j].Имя+ " "+Строка(Value));
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СчетчикЛ = 3000 Тогда
СчетчикЛ = 0;
Command.UpdateBatch();
Счетчик = Счетчик + 1;
Иначе
СчетчикЛ = СчетчикЛ + 1;
КонецЕсли;
КонецЦикла;
Попытка
Command.UpdateBatch();
Command.Close();
Исключение
Сообщить(NameTable);
КонецПопытки;
а! понил что это за изврат! ;) так вот - в адодб есть другой объект, по-моему называется чтото вроде как "квери" (Query) Смысл в том, что можно в его реквизит "текст" вставить любой сиквел-запрос и его выполнить. это может быть и insert.
а можно в принципе сформировать тебе текстовый файл с данными таблицы по формату bulk insert и с помощью команды консоли isql загрузить его этим самым булком на сервер.
кароче, пытайся перейти на средства сиквела - чем ближе, тем лучше! АДО такие средства предоставляет, но я с ней лишь несколько лет назад из делфей работал, в визуальном режиме! :)
Вот еще мысль пришла: раз ты делаешь транспорт из файловой системы в сиквел, почему бы тебе внешнее приложение не использовать? те же делфи или васик? ;)
а можно в принципе сформировать тебе текстовый файл с данными таблицы по формату bulk insert и с помощью команды консоли isql загрузить его этим самым булком на сервер.
кароче, пытайся перейти на средства сиквела - чем ближе, тем лучше! АДО такие средства предоставляет, но я с ней лишь несколько лет назад из делфей работал, в визуальном режиме! :)
Вот еще мысль пришла: раз ты делаешь транспорт из файловой системы в сиквел, почему бы тебе внешнее приложение не использовать? те же делфи или васик? ;)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот