繁体   English   中英

从SQL Server导入数据到Access 2010

[英]Importing data from SQL Server to Access 2010

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

我在Access中使用一个查询创建了一个记录集,该查询使用多个UNION ALL语句合并了所有数据。 我最初的方法是使用以下方式遍历记录集:

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的连接以及当前目标的连接中时,我无法全神贯注于如何执行此操作数据库。

任何建议将不胜感激。

尝试使用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作为数据目标。

我没有使用太多本机表,但我怀疑问题与一次插入一个表有关。

您可能想要尝试通过SQL插入并一次执行50行左右。

为什么不尝试执行插入查询而不是创建记录集? 看到这个问题: 如何使用VBA将“整个” DAO记录集插入到表中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM