[英]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.