powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / rs.UpdateBatch
6 сообщений из 6, страница 1 из 1
rs.UpdateBatch
    #39829111
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня 2 recordset один к Excel(листу) другой к MSSQL(таблица без индексов, триггеров)


Из rs_excel мне необходимо загрузить в rs_mssql
Циклом по rs_excel я пробежался в кэш rs_mssql записал, потом выполняю
Код: vbnet
1.
rs_mssql.UpdateBatch 


И почему-то запись на сервер идет очень медленно, как можно ускорить работу?
медленно по ~15 записей за раз, возможно это ограничение увеличить?
План запроса ниже
Возможно вы предложите использовать инструменты MSSQL для загрузки excel на сервер, файл находится на компьютере пользователя.

Настройки rs

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            Set rs_excel = New ADODB.Recordset
                rs_excel.CursorType = adOpenForwardOnly
                rs_excel.CursorLocation = adUseClientBatch
                rs_excel.LockType = adLockBatchOptimistic
                rs_excel.Open sql, cn_excel

            Set rs_mssql = New ADODB.Recordset
                rs_mssql.CursorType = adOpenForwardOnly
                rs_mssql.CursorLocation = adUseClientBatch
                rs_mssql.LockType = adLockBatchOptimistic
                rs_mssql.Open sql, cn_mssql
...
Рейтинг: 0 / 0
rs.UpdateBatch
    #39829230
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha, кол-во записей скорее всего прописано в провайдере
В лоб, ускорить никак нельзя, т.к будет все одно построчное выполнение (/на каждую строку будет формироваться insert/update)

Для ускорения :
1 вариант: если у MSSQL сервера есть доступ к файлу, то загрузить стандартными средствами (Export/Import)
2 вариант (в таком виден не разу не использовал):
преобразовать рекордсет в строку (GetString)

строку передать на сервер одним запросом

распарсить и вставить переданные данные на сервере
...
Рейтинг: 0 / 0
rs.UpdateBatch
    #39829796
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKotFocha, кол-во записей скорее всего прописано в провайдере
Вот это я понимаю, но может есть варианты управлять данным ограничением?
Мое подключение к серверу:
Код: vbnet
1.
2.
3.
4.
5.
        Set cn_mssql = New ADODB.Connection
            cn_mssql.ConnectionString = "Provider=SQLOLEDB;Integrated Security=SSPI;server=name_server;"
            cn_mssql.ConnectionTimeout = 600
            cn_mssql.CommandTimeout = 600
            cn_mssql.Open




HandKot1 вариант: если у MSSQL сервера есть доступ к файлу, то загрузить стандартными средствами (Export/Import)
файл на машине пользователя
HandKot2 вариант (в таком виден не разу не использовал)
это точно нет
...
Рейтинг: 0 / 0
rs.UpdateBatch
    #39830136
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha,

точно не знаю, возможно в параметре строки подключения увеличить Packet Size


а чем второй вариант не устраивает?
...
Рейтинг: 0 / 0
rs.UpdateBatch
    #39830199
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/updatebatch-method?view=sql-server-2017 You should use batch updating with either a keyset or static cursor only
https://www.sql.ru/docs/mssql/adoandsql/index.shtml 8.4. Использование пакетного обновления (Batch Updating)
...
В SQL Server метод UpdateBatch является допустимым только, когда свойство LockType установлено в adLockBatchOptimistic и тип курсора - либо keyset-driven, либо static. Курсор типа keyset-driven может открываться с таблицами, имеющими уникальные индексы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
rs.UpdateBatch
    #39986982
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменил
Код: vbnet
1.
Provider=SQLOLEDB


на
Код: vbnet
1.
Driver={SQL Server}



стало в разы быстрее

HandKot
Focha, кол-во записей скорее всего прописано в провайдере
В лоб, ускорить никак нельзя, т.к будет все одно построчное выполнение (/на каждую строку будет формироваться insert/update)

При параметре adLockBatchOptimistic и UpdateBatch, он формирует
Код: sql
1.
2.
insert table
values (1),(2),(3)...


А это значит, от отправляет вставку сразу нескольких строк.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / rs.UpdateBatch
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]