Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как загрузить в SQL базу из 1С большое количество строк

Как загрузить в SQL базу из 1С большое количество строк
Я
   TDI
 
13.03.20 - 07:28
Сейчас делается в цикле, через выполнение запросов
INSERT INTO [---]
Но часто и связь почему то прерывается (с sql сервером), приходится заново запускать. Да и мне кажется что не оптимальный это способ.
Подскажите, какие еще есть способы, более оптимальные, для добавления записей на sql сервер ?
   Sserj
 
1 - 13.03.20 - 07:31
insert into самый оптимальный, только делай его не по одной строчке а собирай в цикле большой сразу строк на тысячу, чтобы получишь соответственно ускорение в 1000 раз.
   acht
 
2 - 13.03.20 - 07:56
(0) google://bulk+insert
   rphosts
 
3 - 13.03.20 - 07:57
(2) +индексы видимо снести а после загрузки создать (если это разовая загрузка).

А что сразу не напрямую SQL -> SQL?
   Bigbro
 
4 - 13.03.20 - 08:01
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/insert-transact-sql?view=sql-server-ver15
ну если по одной строке инсертить то да неоптимально.
   TDI
 
5 - 13.03.20 - 08:19
(1) пишется по 50 строк.
Т. К. Когда в строке формируется запрос, видимо есть какое то ограничение по длине строки, и запрос может весь не влезть..
   DrZombi
 
6 - 13.03.20 - 08:22
(5) А как вы пишите?
Через АДО?
   DrZombi
 
7 - 13.03.20 - 08:26
(5)   Смотрите Длина строки, содержащей инструкции SQL в статье:

Длина строки, содержащей инструкции SQL (размер пакета)        65 536 * размер сетевого пакета    Размер сетевого пакета — это размер пакетов потока табличных данных (TDS), которые используются для связи между приложениями и компонентом Компонент Database Engine. По умолчанию размер пакета равен 4 КБ, а его настройка осуществляется с помощью параметра конфигурации network packet size.

https://docs.microsoft.com/ru-ru/sql/sql-server/maximum-capacity-specifications-for-sql-server?redirectedfrom=MSDN&view=sql-server-ver15
   DrZombi
 
8 - 13.03.20 - 08:28
   DrZombi
 
9 - 13.03.20 - 08:30
придется вам все же создать на SQL...


Создание определяемых пользователем функций (компонент Database Engine)
https://docs.microsoft.com/ru-ru/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine?view=sql-server-ver15
   DrZombi
 
10 - 13.03.20 - 08:32
А так, скрипт вам ненужен, просто надо подготовить файлики и загрузить их.

Массовый импорт и экспорт данных (SQL Server)
https://docs.microsoft.com/ru-ru/sql/relational-databases/import-export/bulk-import-and-export-of-data-sql-server?view=sql-server-ver15#MethodsForBuliIE
   DrZombi
 
11 - 13.03.20 - 08:35
+ А нет, можно и через скрипт :)

46. Массовый импорт и экспорт данных в SQL Server

Методы
SQL Server поддерживает массовый экспорт данных из таблиц SQL. Server и массовый импорт данных в таблицы или несекционированные представления SQL Server.Доступны следующие основные методы.

BULK INSERT, инструкция (импортирует)- Инструкция Transact-SQL, импортирующая данные непосредственно из файла данных в таблицу базы данных или несекционированное представление.
Инструкция INSERT ...SELECT * FROM OPENROWSET(BULK...). (импортирует)- Инструкция Transact-SQL, использующая поставщик больших наборов строк OPENROWSET для массового импорта данных в таблицу SQL Server с помощью функции OPENROWSET(BULK...), применяющейся для выборки данных в предложение INSERT.
cp, программа (импортирует и экспортирует) - Программа командной строки (Bcp.exe), массово экспортирующая и импортирующая данные и создающая файлы форматирования.


https://github.com/Panda-Lewandowski/DataBase/wiki/46.-Массовый-импорт-и-экспорт-данных-в-SQL-Server
   DrZombi
 
12 - 13.03.20 - 08:38
   DrZombi
 
13 - 13.03.20 - 08:42
(0)Вам в (12)
   Йохохо
 
14 - 13.03.20 - 08:58
(13) ОФФ. а ты сам пробовал? SQL Server Data Tools надо ставить?
   DrZombi
 
15 - 13.03.20 - 09:15
(14) Мне было любопытно, есть ли ограничение, и что сделать ,что бы его обойти.

1. Ограничение на скрипт есть
2. Обойти его нельзя, т.е. настройки ограничены
3. Есть методы у SQL, загрузки из файла. (надо делать го гуглить - для ТС)
4. Моё личное любопытство удовлетворяет ссылка в (12).

п.с. для ТС самому решать, как быть...
   nicxxx
 
16 - 13.03.20 - 10:48
(0) "Но часто и связь почему то прерывается (с sql сервером), приходится заново запускать" - дичь. Не должна рваться связь, хоть ты миллиард инсертов делаешь. Тут к админам вопрос, что там с сетью происходит. Может у вас SQL и 1С через 50 коммутаторов подключаются? :)
   pechkin
 
17 - 13.03.20 - 10:50
(3) только не снести, а отключить
   nicxxx
 
18 - 13.03.20 - 10:51
(1) золотые слова. а еще begin tran надо добавить, так еще немного быстрее будет
   TDI
 
19 - 13.03.20 - 16:37
Спасибо за ответы.
Ещё попутный вопрос, как (если говорить что строки в цикле записываются) сделать все записи в одной транзакции.
А-то получается что выгрузка идет около 15 минут, и иногда пользователь может зайти, и увидеть "половинчатые" данные.
Как это в одной транзакции сделать ?
begin tran
commit tran
я как понимаю только для текущего пакета записей будут работать, но не для всей выгрузки..
   arsik
 
20 - 13.03.20 - 16:43
(19) Заполняйте сначала временную таблицу, как ее заполнили все из нее в рабочую.
   Fragster
 
21 - 13.03.20 - 16:50
Подключаем внешний источник данных и пихаем в него набор записей. дальше 1с сама разберется
   arsik
 
22 - 13.03.20 - 16:52
(21) Программно? Я вроде помню, что внешний источник только в конфигураторе можно.
   TDI
 
23 - 13.03.20 - 16:52
(21) да, чтото про внешний источник забыл..
так это вообще всю выгрузку получается через этот объект можно сделать ?
   Fragster
 
24 - 16.03.20 - 13:20
(23) да
   Fragster
 
25 - 16.03.20 - 13:21
(22) в конфигураоре, да


Список тем форума
Рекламное место пустует  Рекламное место пустует
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.