Каков самый быстрый способ импортировать данные в базу данных SQL Server непосредственно из активного листа в Excel?Какой самый быстрый способ для импорта из активного листа в Excel на SQL Server?
У меня был большой успех, просто прокручивая строки и столбцы, создавая строку SQL, открывая ADODB.Connection и выполняя SQL. Однако это решение слишком медленное для больших наборов данных.
Так что я тестирую Jet Provider с помощью ADO. Это определенно быстрее, но для этого требуется, чтобы рабочая книга была сохранена, и я не могу требовать от пользователя сохранения рабочей книги перед ее загрузкой.
Следующий код работает, если книга сохранена, но если ActiveWorkbook никогда не был сохранен, ActiveWorkbook.Path возвращает пустую строку и код не работает.
Sub UploadViaJet()
Dim objADO As New ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set objADO = New ADODB.Connection
objADO.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ActiveWorkbook.Path & _
"\" & ActiveWorkbook.Name & ";" & _
"Extended Properties=Excel 8.0"
strSQL = "SELECT * INTO [odbc;Driver={SQL Server};" & _
"Server=<server>;Database=<database>;" & _
"UID=<UID>;PWD=<PWD>].test_table " & _
"FROM [" & ActiveSheet.Name & "$]"
objADO.Execute strSQL, lngRecsAff, adExecuteNoRecords
End Sub
Есть ли более простой и быстрый способ сделать это?
Почему бы просто не использовать API-интерфейс временного файла Windows? –
Это хорошая идея, за исключением того, что в вопросе указывается, что пользователю не следует запрашивать сохранение файла. Таким образом, копирование содержимого в другой файл и использование Windows Temp File API было бы моим выбором. –
Я использую ADO распределенные запросы до этого момента. Он работал хорошо для меня, но мои размеры данных выросли до такой степени, что операции выполняются в течение длительного времени и иногда превышают объем памяти компьютера. Использование временного файла кажется хорошим решением, даже если оно требует управления временным файлом. Спасибо Радж! – Kuyenda