有没有更快的方法将Excel中的行导出到SQL Server?

时间:2016-03-30 18:04:37

标签: sql-server excel vba excel-vba

我有8,500行,有36列,我需要插入到SQL Server表中,目前需要9分钟。我想知道是否有更快的方法来做到这一点。我已经阅读了批量插入内容,但我将其作为最后的手段保存。

目前我正在做的是,我正在为每个循环使用一个并使用if语句来检查每个单元格是否格式正确(可能是它缓慢的原因,但我需要它)。我将它们连接起来,立即出口。

提前致谢。

3 个答案:

答案 0 :(得分:1)

首先,您需要在您的SQl-server实例上安装此驱动程序([Microsoft.ACE.OLEDB.12.0])

Download Here - Driver

然后在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秒。

我将它作为纪念产品出售,但如果是限时工作,您可以免费使用全功能试用版(如果您需要,只需发送电子邮件给我,我会为您延长试用期) 。

您可以在此处下载http://sqlspreads.com/download-sql-spreads/