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

将带有Access前端的CSV文件导入SQL Server,sql,sql-server,database,ms-access,Sql,Sql Server,Database,Ms Access,背景: 在我的公司,我们有许多CSV文件,必须导入到SQL Server中。CSV文件包含多维市场模拟,以EAV形式存储(2列10^6到10^10行)。它们的大小是可变的,但超过500Mb并不罕见 到目前为止,这些文件是由数据库管理员通过SSMS导入SQL Server的 每次导入都应该获得一个ImportationID和一个时间戳。对于手动执行此操作的数据库管理员来说,这既耗时又容易出错 因此,创建了一个访问前端,允许每个用户在使用列表框进行选择后轻松地将CSV文件导入服务器。 现在,我面临通

背景:

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

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

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

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

问题:

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

  • 向SQL Server传递一些T-SQL命令,如下所示(Access不允许)
  • 使用VBA循环逐行导入CSV(对于10^6到10^10行来说花费的时间太长)
  • 在Access数据库中导入CSV文件,然后将表导出到SQL Server(2Gb大小的Access限制使其不可能)

使用Access执行此任务是否还有其他选项?

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

存储过程将发出BulkInsert(或链接到的其他命令)以将CSV获取到数据库中,然后根据业务规则(例如,正确设置ImportationID和时间戳)操作数据并进行转换


这是数据库开发人员(或者可能是数据库管理员)应该能够设置的,并且可以在数据库上强制执行任何验证或安全约束。

您链接的页面中有一些代码,这些代码应该作为SQL Server数据库的TSQL执行。我不认为您可以使用Access和ADODB来使用该代码。我认为正确的方法是导入CSV以访问;在Access中操作/转换数据;将数据填充到暂存表中的SQL Server;在SQL Server中启动存储过程以接收数据。需要更多细节来帮助您解决问题。谢谢,我已经添加了更多细节。主要问题是文件太大,无法导入Access,有些文件超过了2Gb的访问限制。这是个好主意!我会和db管理员一起设置。