从Excel导入超过1000行到SQL服务器

时间:2015-12-10 14:45:32

标签: sql-server excel vba excel-vba import-from-excel

该过程在Excel VBA 2010和MS SQL Server 2008的环境中运行。

假设在Excel工作表中有一个包含1500行的简单一列数据,我们希望使用VBA代码中的SQL查询将其导出到数据库(VBA中的SQL过程在默认模式下一次导出最多1000行)。

此问题有一个限制:导出过程必须使用dbclass-connection而不是ADODB连接。 (代码所有者不是我。代码所有者使用dbclass来获取相当大的VBA代码,因此他可能不会接受更改整个代码。)

我为lngRecsAff找到了ADODB.Connection之类的选项,其使用方式如下:

Sub test() 
   Dim cn As ADODB.Connection 
   Dim strSQL As String 
   Dim lngRecsAff As Long 
   Set cn = New ADODB.Connection 
  cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.xls; Extended Properties=Excel 8.0" 

  strSQL = "Insert INTO [odbc;Driver={SQL Server};Server=SQL09;Database=Tom;UID=userID;PWD=password].tbl_test1 Select * FROM [Sheet1$]" 
  cn.Execute strSQL, lngRecsAff
  cn.Close 
  Set cn = Nothing 
End Sub

我尝试在我的dbclass执行中实现lngRecsAff,如:

Sub test()
  Dim connOk As Boolean
  Dim rs As New ADODB.Recordset
  Set dbclass = New clsDB
  Dim Value1() As Variant
  Dim lngRecsAff As Long
  Dim strSQL as String
  Dim mstrErr as Boolean

  dbclass.Database = "database_name"
  dbclass.ConnectionType = SqlServer
  dbclass.DataSource = "server_name"
  dbclass.UserID = Application.UserName

  connOk = dbclass.OpenConnection(False, True)
    If connOk = False Then
       MsgBox "Unsuccessful connection!"
    Else
       MsgBox "Successful connection"
    End If

  strSQL = "INSERT INTO [dbo].[table1](Column1) Values('" & Value1 & "')"
  mstrErr = dbclass.ExecuteSQL(strSQL, lngRecsAff) ' The result mstrErr is a Boolean 
   ' Some closing options here
End Sub

我收到lngRecsAff之类的错误,不适合我的ExecuteSQL程序。通常我的执行mstrErr = dbclass.ExecuteSQL(strSQL)没有任何问题。

也许我可以使用for-loop执行SQL过程,然后我可以将数据发送成小块。但我想找到一个更有效,更“更好”的解决方案,它可以立即发送整个阵列。

那么dbclass是否有任何特殊选项可以从Excel向数据库发送超过1000行?

1 个答案:

答案 0 :(得分:3)

您可以使用喜欢的服务器直接查询Excel工作表。

在您的Management Studio中,单击“"服务器对象"然后右键单击"链接服务器"。在那里,您可以添加新的链接服务器。

如果您需要进一步的帮助,您可以轻松找到tuorial。一个在这里: https://www.mssqltips.com/sqlservertip/2018/using-a-sql-server-linked-server-to-query-excel-files/