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

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

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

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

我发现像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过程,然后我可以发送小块数据。 但是我想find一个更高效,更好的解决scheme,一次发送整个数组。

那么dbclass有什么特别的select可以从Excel发送超过1000行到数据库?

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

在您的Management Studio中,单击“服务器对象”,然后右键单击“链接的服务器”。 在那里你将能够添加一个新的链接服务器。

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