|
Excel > Recordset > MSSQL
|
|||
---|---|---|---|
#18+
Что-то не могу понять: Пользователь запускает макрос, нажимает загрузить данные (excel определенного формата, артикула идут вниз, недели в столбцы и данные) Пример Excel Артикул 201801201802201803201804201805201806201807123121212112410131111251222422 Результат в таблице на сервере Артикул неделя данные123 201801 1123 201802 2123 201803 1123201804 2123 201805 1123 201806 2123 201807 1 Я реализовал это через 2 Recordset с подключением к серверу и к листу excel и дальше перебираю данные в Recordset excel и добавляю данные в Recordset сервера. Мне надо получить максимальную производительность, необходимо вставить около 1 000 000 строк, можете, что-нибуть подсказать? *insert into дольше получается, так как данные из Excel необходимо форматировать под mssql Я сначала подумал проблема в настройках, поставил LockType = adLockBatchOptimistic, но в таком случае он не вставляет данные в таблицу. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 10:51 |
|
Excel > Recordset > MSSQL
|
|||
---|---|---|---|
#18+
FochaЯ сначала подумал проблема в настройках, поставил LockType = adLockBatchOptimistic, но в таком случае он не вставляет данные в таблицу. Вот это должно быть, после всех добавлений Код: vbnet 1.
И делай клиентский курсор для rs_sql FochaМне надо получить максимальную производительность Максимальную с "переливанием" из рекордсета в рекордсет никогда не получишь ... Если есть возможность создавать объекты на сервере, то можно было бы создать ХП, в которую передать rs_ex сериализованный в XML, и в этой ХП его загрузить ... - вот это было бы быстро ... Ну и совсем идеально (и быстро) было бы через запрос OpenRowset к Экселю ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 11:05 |
|
Excel > Recordset > MSSQL
|
|||
---|---|---|---|
#18+
courtВот это должно быть, после всех добавлений Код: vbnet 1.
Понял, теперь обновляется, спасибо courtИ делай клиентский курсор для rs_sql Делаю именно так courtМаксимальную с "переливанием" из рекордсета в рекордсет никогда не получишь ... Если есть возможность создавать объекты на сервере, то можно было бы создать ХП, в которую передать rs_ex сериализованный в XML, и в этой ХП его загрузить ... - вот это было бы быстро ... передать rs_ex сериализованный в XML - это как, создать xml и отправить на сервер? я пробовал так, после создания xml в VBA использовал xpath, он тратит много времени на преобразование xml и вставку, в таблице есть индексы Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
courtНу и совсем идеально (и быстро) было бы через запрос OpenRowset к Экселю Прав не хватает, так как файл должен быть на сервере ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 11:25 |
|
Excel > Recordset > MSSQL
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 11:27 |
|
Excel > Recordset > MSSQL
|
|||
---|---|---|---|
#18+
Fochaпередать rs_ex сериализованный в XML - это как, создать xml и отправить на сервер? я пробовал так, после создания xml в VBA использовал xpath, он тратит много времени на преобразование xml и вставку, в таблице есть индексы Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Да, примерно об этом я и писал (только всё было бы в ХП, но это не суть важно ...) Так, а "тратит много времени" - на выполнение этого запроса, или, всё таки, на создание XML-я ? Создаете XML как ? через метод рекордсета Save ? Типа этого : Код: vbnet 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 11:51 |
|
|
start [/forum/topic.php?fid=61&fpage=11&tid=2172121]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 179ms |
0 / 0 |