将大 Excel Sheet 导入 SQL

Importing Large Excel Sheet into SQL

每月我都会收到需要导入到 SQL 的电子表格。我通常做的是使用 SQL 服务器导入和导出向导并导入到临时文件 table 中,然后调用存储过程来完成导入过程。这一切在我的生产服务器上运行良好,在我的开发机器上运行良好,直到上周我全新安装了 Windows 10。现在,我仍然能够导入只有几千个的较小电子表格行,但是,如果我尝试从具有 500,000 多行数据的电子表格中导入数据,则在 "Setting Source Connection" 和 "Setting Destination Connection" 上都需要几分钟,然后似乎挂在 "Copying" 上。我已经检查了日志和 运行 SQL Profiler,没有看到任何关于失败的信息。我让进程 运行 持续了一个多小时并最终将其终止,查看了临时文件 table 并显示没有导入任何记录。数据格式很好,因为我可以毫无问题地导入我的生产服务器。

现在更重要的是......只有当我同时在 Excel 中打开电子表格时,我才能在我的开发服务器上导入这些大表,(请注意,对于较小的电子表格,我不需要打开电子表格即可导入)。打开电子表格后,导入过程可以进行,但速度很慢,不是一种有效的处理方式。

关于导入仅适用于小型电子表格的任何想法,除非电子表格也在 Excel 中打开?

我在 Windows 10 Pro 和 Office 2016 上使用 SQL Server 2008 R2。我还安装了 AccessDatabaseEngine - 2007。

编辑: 我创建了一个 SSIS 包,运行 按照建议创建了它,一切都按预期进行。为了让事情变得更加 st运行ge,我经历了 Import/Export 向导并选择 运行 立即创建 SSIS,一切再次按预期工作。我再次通过向导,但选择了 运行 立即(没有创建 SSIS),它仍然挂起复制。我尝试再 运行 4 次,如果选择 "Run Immediately" 和 "Create SSIS" 每次都有效,但每次仅选择 "Run Immediately" 时都失败(不创建 SSIS)。老实说,我很困惑这是怎么发生的,我愿意接受更多建议。

终于找到解决这个问题的办法了!

由于我能够在打开时导入工作表,这让我认为我的问题是由于 SQL 和 Excel 之间的连接速度慢造成的,所以我开始朝那个方向寻找。我在其他网站上发现了一些 posts 在谈论与 Windows 8 和 10 的缓慢 ODBC 连接。一个网站提到将驱动程序切换到 "SQL Native Client" .我选择我的目的地 "SQL Server Native Client 10.0",我按照建议切换到 "SQL Native Client",现在一切都按预期进行。

我看到这两个驱动程序列为:

Driver                          Version
------------------------------------------------
SQL Native Client               2005.90.3042.00
SQL Server Native Client 10.0   2009.100.6000.34

我猜旧版 (2005) SQL Native Client 可以工作是因为 Import/Export 使用了 AccessDatabaseEngine - 2007.

注意: 使用 Windows 7 或 2008 服务器时,我在使用 (2009) [=43= 导入大型电子表格时没有遇到任何问题] 服务器本机客户端 10.0。这似乎只是 Windows 更高版本的问题。我看到其他几个网站提到在 Windows 10 上使用 TCP 进行 ODBC 连接存在性能问题,他们发现使用命名管道有显着改善。由于我的生产服务器使用 TCP,我没有在我的开发机器上对命名管道进行更改,所以我无法确认这一点,但我想在某些人遇到这个 post 遇到这个问题时提及它。