| 
    
            
         
         | 
    
  | 
Как загрузить в 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) в конфигураоре, да     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |