【问题标题】:Inserting records into SQL Server linked table via access taking a long long time [duplicate]通过需要很长时间的访问将记录插入到 SQL Server 链接表中[重复]
【发布时间】: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


【解决方案1】:

可以将 MS Access DoCmd.TransferText 方法放入宏中。此函数可以将表或查询转储到文本文件。它在本地(源)机器上运行得非常快。

使用适当的命令行开关创建一个调用bcp 实用程序的批处理文件以加载SQL Server 表。这将在远程(目标)SQL Server 数据库上同样快速地运行。确保检查错误日志文件以查找有错误的批次。您可以使用批量大小选项调整过程。

这将通过痛苦的行 (RBAR) 过程将您的行转换为 BULK LOAD 过程。

快乐编码

约翰·米纳

狡猾的 DBA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2015-05-12
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多