通过需要很长时间的访问将记录插入到 SQL Server 链接表中[重复]

Posted

技术标签:

【中文标题】通过需要很长时间的访问将记录插入到 SQL Server 链接表中[重复]【英文标题】:Inserting records into SQL Server linked table via access taking a long long time [duplicate] 【发布时间】: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 服务器和执行命令的机器之间的共享驱动器上。 【参考方案1】:

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

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

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

快乐编码

约翰·米纳

狡猾的 DBA

【讨论】:

以上是关于通过需要很长时间的访问将记录插入到 SQL Server 链接表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 数据插入 Core Data 存储需要很长时间

将视图插入表格 - 视图不需要很长时间才能运行 - 插入需要很长时间

为啥 SQL Server 表值函数插入需要很长时间?

SQL Server 查询以查找间隔或 12 个月或更长时间的记录

从 SQL 服务器动态地将单个记录插入到 MS 访问中

使用 Flex 时 SQL Server 需要很长时间才能将数据返回到 ColdFusion