将带有 Access 前端的 CSV 文件导入 SQL Server

Posted

技术标签:

【中文标题】将带有 Access 前端的 CSV 文件导入 SQL Server【英文标题】:Import a CSV file with Access frontend into SQL Server 【发布时间】:2014-01-15 22:44:58 【问题描述】:

背景:

在我的公司,我们有许多 CSV 文件必须导入 SQL Server。 CSV 文件包含多维市场模拟,这些模拟以 EAV 形式存储(2 列和 10^6 到 10^10 行)。它们的大小是可变的,但超过 500Mb 的情况并不罕见。

到目前为止,这些文件是由数据库管理员通过 SSMS 导入 SQL Server 的。

每个导入都应该有一个 ImportationID 和一个时间戳。对于手动执行此操作的数据库管理员来说,这既耗时又容易出错。

因此,创建了一个 Access 前端,以允许每个用户在使用列表框进行选择后轻松地将 CSV 文件导入服务器。 现在,我遇到了通过Access接口导入CSV文件的问题。

问题:

以下是我考虑过但不可能的可能选项:

将一些 T-SQL 命令传递给 SQL Server,如此处所列(Access 不允许) 使用 VBA 循环逐行导入 CSV(10^6 到 10^10 行耗时太长) 将 CSV 文件导入 Access 数据库中,然后将表导出到 SQL Server(Access 的 2Gb 大小限制使其无法实现)

还有其他选项可以使用 Access 执行此任务吗?

【问题讨论】:

您链接的页面包含应作为 TSQL 针对 SQL Server 数据库执行的代码。我认为您不能使用 Access 和 ADODB 使用该代码。我想正确的方法是将CSV导入Access;在 Access 中操作/转换数据;将数据填充到临时表中的 SQL Server;在 SQL Server 中触发 sproc 以摄取数据。需要更多详细信息来帮助您解决问题。 谢谢,我添加了更多细节。主要问题是文件太大而无法导入Access,有些超过了Access的2Gb限制。 【参考方案1】:

一种可能的解决方案如下。您的 Access 前端有一个接受三个值的表单:文件名/位置;进口标识;时间戳。用户输入这些数据后,“Go”或“Submit”按钮会触发 SQL Server 数据库上接受这 3 个变量的存储过程。

存储过程将发出 BulkInsert(或您链接到的其他命令)以将 CSV 导入数据库,然后根据您的业务规则处理数据并对其进行转换(例如,正确设置 ImportationID 和 Timestamp )。

这是数据库开发人员(或者可能是数据库管理员)应该能够设置的东西,并且可以对数据库实施任何验证或安全约束。

【讨论】:

这是个好主意!我将使用数据库管理员进行设置。

以上是关于将带有 Access 前端的 CSV 文件导入 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 导入新表 -MS Access

以编程方式将 CSV 数据导入 Access

使用 VBA 将 CSV 文件导入 Access

将特定数据从 csv 文件导入 MS Access

使用 vba/macros 将多个 CSV 文件中的特定列导入 Access 2013

phpmyadmin 导入带有符号的 csv