|
Как загрузить в SQL базу из 1С большое количество строк | ☑ | ||
---|---|---|---|---|
0
TDI
13.03.20
✎
07:28
|
Сейчас делается в цикле, через выполнение запросов
INSERT INTO [---] Но часто и связь почему то прерывается (с sql сервером), приходится заново запускать. Да и мне кажется что не оптимальный это способ. Подскажите, какие еще есть способы, более оптимальные, для добавления записей на sql сервер ? |
|||
1
Sserj
13.03.20
✎
07:31
|
insert into самый оптимальный, только делай его не по одной строчке а собирай в цикле большой сразу строк на тысячу, чтобы получишь соответственно ускорение в 1000 раз.
|
|||
2
acht
13.03.20
✎
07:56
|
(0) google://bulk+insert
|
|||
3
rphosts
13.03.20
✎
07:57
|
(2) +индексы видимо снести а после загрузки создать (если это разовая загрузка).
А что сразу не напрямую SQL -> SQL? |
|||
4
Bigbro
13.03.20
✎
08:01
|
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/insert-transact-sql?view=sql-server-ver15
ну если по одной строке инсертить то да неоптимально. |
|||
5
TDI
13.03.20
✎
08:19
|
(1) пишется по 50 строк.
Т. К. Когда в строке формируется запрос, видимо есть какое то ограничение по длине строки, и запрос может весь не влезть.. |
|||
6
DrZombi
гуру
13.03.20
✎
08:22
|
(5) А как вы пишите?
Через АДО? |
|||
7
DrZombi
гуру
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 |
|||
8
DrZombi
гуру
13.03.20
✎
08:28
|
И
Размер сетевого пакета не должен превышать 8060 байт https://docs.microsoft.com/ru-ru/sql/relational-databases/policy-based-management/network-packet-size-should-not-exceed-8060-bytes?view=sql-server-ver15 |
|||
9
DrZombi
гуру
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 |
|||
10
DrZombi
гуру
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 |
|||
11
DrZombi
гуру
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 |
|||
12
DrZombi
гуру
13.03.20
✎
08:38
|
А есть еще http://catalog.mista.ru/public/1009357/
|
|||
13
DrZombi
гуру
13.03.20
✎
08:42
|
(0)Вам в (12)
|
|||
14
Йохохо
13.03.20
✎
08:58
|
(13) ОФФ. а ты сам пробовал? SQL Server Data Tools надо ставить?
|
|||
15
DrZombi
гуру
13.03.20
✎
09:15
|
(14) Мне было любопытно, есть ли ограничение, и что сделать ,что бы его обойти.
1. Ограничение на скрипт есть 2. Обойти его нельзя, т.е. настройки ограничены 3. Есть методы у SQL, загрузки из файла. (надо делать го гуглить - для ТС) 4. Моё личное любопытство удовлетворяет ссылка в (12). п.с. для ТС самому решать, как быть... |
|||
16
nicxxx
13.03.20
✎
10:48
|
(0) "Но часто и связь почему то прерывается (с sql сервером), приходится заново запускать" - дичь. Не должна рваться связь, хоть ты миллиард инсертов делаешь. Тут к админам вопрос, что там с сетью происходит. Может у вас SQL и 1С через 50 коммутаторов подключаются? :)
|
|||
17
pechkin
13.03.20
✎
10:50
|
(3) только не снести, а отключить
|
|||
18
nicxxx
13.03.20
✎
10:51
|
(1) золотые слова. а еще begin tran надо добавить, так еще немного быстрее будет
|
|||
19
TDI
13.03.20
✎
16:37
|
Спасибо за ответы.
Ещё попутный вопрос, как (если говорить что строки в цикле записываются) сделать все записи в одной транзакции. А-то получается что выгрузка идет около 15 минут, и иногда пользователь может зайти, и увидеть "половинчатые" данные. Как это в одной транзакции сделать ? begin tran commit tran я как понимаю только для текущего пакета записей будут работать, но не для всей выгрузки.. |
|||
20
arsik
гуру
13.03.20
✎
16:43
|
(19) Заполняйте сначала временную таблицу, как ее заполнили все из нее в рабочую.
|
|||
21
Fragster
гуру
13.03.20
✎
16:50
|
Подключаем внешний источник данных и пихаем в него набор записей. дальше 1с сама разберется
|
|||
22
arsik
гуру
13.03.20
✎
16:52
|
(21) Программно? Я вроде помню, что внешний источник только в конфигураторе можно.
|
|||
23
TDI
13.03.20
✎
16:52
|
(21) да, чтото про внешний источник забыл..
так это вообще всю выгрузку получается через этот объект можно сделать ? |
|||
24
Fragster
гуру
16.03.20
✎
13:20
|
(23) да
|
|||
25
Fragster
гуру
16.03.20
✎
13:21
|
(22) в конфигураоре, да
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |