该过程在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行?
答案 0 :(得分:3)
您可以使用喜欢的服务器直接查询Excel工作表。
在您的Management Studio中,单击“"服务器对象"然后右键单击"链接服务器"。在那里,您可以添加新的链接服务器。
如果您需要进一步的帮助,您可以轻松找到tuorial。一个在这里: https://www.mssqltips.com/sqlservertip/2018/using-a-sql-server-linked-server-to-query-excel-files/