将数据从SQL Server导入Access 2010

时间:2014-05-06 19:16:47

标签: sql sql-server vba ms-access-2010

我正在尝试从SQL Server数据库中的一系列表中收集特定数据,并使用VBA将它们组合在Access中的单个表中。

我使用一个使用多个UNION ALL语句组合所有数据的查询在Access中创建了一个记录集。我最初的方法是迭代记录集,例如:

Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

cnn.Open "Driver={SQL Server};Server=" + SQLServerNameStr + ";Database=" + DBNameStr + ";Trusted_Connection=Yes"

SQL = "SELECT A, B, C FROM TableA UNION ALL SELECT D, E, F FROM TableB UNION ALL ..." // etc., etc., etc.

rs.Open SQL, cnn, adOpenForwardOnly

While Not rs.EOF
    CurrentDB().Execute ("INSERT INTO AccessTable VALUES ('" & rs("FieldA") & "', '" & rs("FieldB") & "', '" & rs("FieldC") &"')")
    rs.MoveNext
Wend

这一切都有效,然而,大约20,000条记录的速度极慢。我确信有一种更好的方法...可能是通过将INSERT构建到主查询中,然而,当数据源与SQL Server的连接和当前的目标时,我无法理解如何执行此操作数据库中。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:1)

尝试使用DoCmd.TransferDatabase *将数据从SQL Server视图传输到Access表中,该视图以您需要的方式查询数据。

DoCmd.TransferDatabase acImport, "ODBC Database", _ 
"Driver={SQL Server};Server=" & SQLServerNameStr & ";Database=" & DBNameStr & _
";Trusted_Connection=Yes", acTable, "SomeSqlServerView", "AccessTable"

希望传输数据库方法能够很好地管理插入并加快导入过程。


*更改了我的答案,因为批量更新不能与Access 2010一起用作数据目标。

答案 1 :(得分:0)

我还没有使用原生表,但我怀疑这个问题与一次插入一个表有关。

您可能希望尝试通过SQL执行插入并一次执行50行。

答案 2 :(得分:0)

为什么不尝试执行Insert查询而不是创建记录集?看到这个问题: How to insert "Entire" DAO recordset into a table with VBA