我有8,500行,有36列,我需要插入到SQL Server表中,目前需要9分钟。我想知道是否有更快的方法来做到这一点。我已经阅读了批量插入内容,但我将其作为最后的手段保存。
目前我正在做的是,我正在为每个循环使用一个并使用if语句来检查每个单元格是否格式正确(可能是它缓慢的原因,但我需要它)。我将它们连接起来,立即出口。
提前致谢。
答案 0 :(得分:1)
首先,您需要在您的SQl-server实例上安装此驱动程序([Microsoft.ACE.OLEDB.12.0])
然后在SQL-Sever上执行此查询:
select *
into mytable
from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=c\desktop\myExcelfile.xlsm')...[mySheet$]
请勿删除此字符“$”
答案 1 :(得分:0)
您可以通过使用数组并使用缓冲区来构建查询来大幅提高性能。 构建一个10000行的查询应该只需几毫秒。 这是一个例子:
Sub build_query()
Dim buffer As String, length&, data(), r&, c&
' load the data in an array '
data = Range("A2:C5")
' create the string buffer '
buffer = String$(2048, vbNullChar)
' write the header '
Append buffer, length, "INSERT INTO [MyTable] ('ColA', 'ColB', 'ColB') Values(" & vbCrLf
' iterate each cell '
For r = 1 To UBound(data)
Append buffer, length, "("
For c = 1 To UBound(data, 2)
If c > 1 Then Append buffer, length, ","
' convert each type '
Select Case VarType(data(r, c))
Case vbDate:
Append buffer, length, format(data(r, c), "'yyyy-mm-dd HH:nn:ss'")
Case vbString:
Append buffer, length, "'" & data(r, c) & "'"
Case Else:
Append buffer, length, CStr(data(r, c))
End Select
Next
Append buffer, length, ")," & vbCrLf
Next
' write the footer '
length = length - 3 ' remove comma '
Append buffer, length, ");"
' display the result '
Debug.Print Left$(buffer, length)
End Sub
Private Sub Append(buffer$, length&, text$)
length = length + Len(text)
If length > Len(buffer) Then
buffer = buffer & String$(Len(buffer) * (length \ Len(buffer)), vbNullChar)
End If
Mid$(buffer, length - Len(text) + 1) = text
End Sub
答案 2 :(得分:0)
我已经创建了一个Excel加载项,您可以将Excel数据导出到SQL Server。测试了8500行和40列,并且将Excel中的行插入SQL Server需要4.5秒。
我将它作为纪念产品出售,但如果是限时工作,您可以免费使用全功能试用版(如果您需要,只需发送电子邮件给我,我会为您延长试用期) 。