【发布时间】:2014-08-11 14:21:19
【问题描述】:
情况: 我们每月收到统计源数据。它以带有 Access 数据库的 CD 形式提供,其中包含两个表。所以我们有 1 个 *.mdb 文件,里面有 2 个表。分析师应该能够导入数据、计算和标准化数据并检查结果。如果结果很好,则填充数据。分析师不是程序员,他们没有 SQLServerManagementStudio。
我的任务: 使用按钮为分析师创建一个访问表单作为前端:导入、计算、检查、填充。每个按钮都会触发路径槽查询,它不会在 sql server 端运行存储过程。
我的问题: 我项目的瓶颈是数据导入。它应该自动完成(而不是手动完成,因为分析师没有安装管理工作室)。
我尝试了什么:
1) 我将 SQL Server 的表链接到访问中,并尝试使用常规查询来复制(INSERT INTO ** FROM *),但它需要的时间太长。 (我在两个表中有大约 400 万行)
2) 因为我喜欢 BULK INSERT 无法从访问文件导入。
3) OPENROWSET 方法:
SELECT *
FROM OPENROWSET( 'Microsoft.Jet.OLEDB.4.0','\\euro-dc\DOTS\2014\dots.mdb';'admin';'',TimeSeries)
返回错误:
消息 7308,级别 16,状态 1,行 1 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 不能用于分布式查询 因为提供程序配置为在单线程单元中运行 模式。
Openrowset 解决方案不可取。我想避免它。因为它可以在某些计算机上运行,但由于 OLDB 驱动程序,它不能在其他计算机上运行。 windows 重新安装后需要检查 OLEDB 驱动程序...不是很舒服,因为有 15 位分析师。只有在没有其他方法可以导入数据的情况下。
\euro-dc\dots 文件夹可用于 sql server - 它已在我的其他项目中进行了测试。
将欣赏任何新的想法。 谢谢
【问题讨论】:
-
@mohan111 也许还有另一种方法可以分开 openrowset。因为解决方案可以在某些计算机上运行,而不能在其他计算机上运行。重装windows后需要检查OLEDB驱动……不是很舒服,分析员有15人。
-
在读入记录之前,您是否尝试将访问文件复制到本地工作站以查看是否加快了复制过程?有时,在尝试处理 CD 或 USB 驱动器上的记录时,性能会大幅下降。
-
@RemedialBear 是的,我的前端解决方案在我的本地机器上。我尝试将 2 个表从源数据库导入其中,速度非常快。但是当我尝试将数据放入 sql srv 时需要很长时间
-
我可能会使用@Barry 在他的回答(和相关的 cmets)中建议的方法之一。
标签: sql sql-server ms-access oledb