【发布时间】:2017-11-28 15:51:06
【问题描述】:
我尝试将大约 57k 行从 MS Access 插入到 SQL Server 链接表中,但速度非常慢。有人可以帮我换一种方法吗?
task0 = "INSERT INTO dbo_WorkTable (ID, [Batch ID], [Pay Group], [Pay Group Description], [General Ledger Account], [General Ledger Cost Center], [General Ledger Department], [Work Center], [Pay Period Ending Date], Hours, Amount, Week, [Pay Type Code], [Pay Type Description], [File Number], Name, [HOURLY SALARY], [FULL TIME_PART TIME], ACTIVE_INACTIVE, [HOURLY RATE] )" _
& "SELECT WorkTable.ID, WorkTable.[L Batch ID], WorkTable.[Pay Group], WorkTable.[Pay Group Description], WorkTable.[General Ledger Account], WorkTable.[General Ledger Cost Center], WorkTable.[General Ledger Department], WorkTable.[Work Center], WorkTable.[Pay Period Ending Date], WorkTable.Hours, WorkTable.Amount, WorkTable.Week, WorkTable.[Pay Type Code], WorkTable.[Pay Type Description], WorkTable.[File Number], WorkTable.Name, WorkTable.[HOURLY SALARY], WorkTable.[FULL TIME_PART TIME], WorkTable.ACTIVE_INACTIVE, WorkTable.[HOURLY RATE]" _
& " FROM WorkTable; "
CurrentDb.Execute(task0), dbFailOnError
非常感谢任何帮助。
【问题讨论】:
-
好吧,你期待什么?将 57.000 条记录从 Microsoft Access 移动到 SQL Server 肯定需要一些时间。我们没有神奇的替代执行相同但更快代码
-
您可以使用 ADODB 打开与您的 SQL Server 的连接,然后使用 OPENDATASOURCE 执行插入回到您的访问数据库...也许。 something like this 否则你将单行插入所有 57000 条记录,这需要一段时间。
-
@ErikvonAsmuth 你觉得怎么样? 57,000 条记录并不多。我认为这里的问题是插入正在链接服务器上运行,最终执行 RBAR 插入而不是批量插入。编辑:JNevill 的想法是正确的。
-
另一个想法是使用 SSMS 或其他方式将访问表导入您的 SQL Server,然后直接在 SQL Server 中运行插入。真正的诀窍是将这些数据批量加载到您的 SQL Server 中。一旦你破解了那个坚果,那么你就是金子。
-
@JacobH 是的,这确实是问题所在,但是如果不是不可避免的话,在服务器上的另一台机器上使用正在运行的 Microsoft Access 数据库时避免逐行插入是很难的(链接JNevill 要求 Access 数据库位于同一台机器上,或者位于 SQL 服务器和执行命令的机器之间的共享驱动器上。
标签: sql-server ms-access linked-tables