0

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

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

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

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

编辑: 我创建了一个 SSIS 包并按照建议运行它,一切都按预期工作。为了让事情变得更奇怪,我通过导入/导出向导并选择立即运行并创建 SSIS,一切都再次按预期工作。我再次浏览了向导,但选择了立即运行(没有创建 SSIS),它仍然挂起复制。我尝试再运行 4 次,如果选择“立即运行”和“创建 SSIS”,每次它都可以工作,但每次只选择“立即运行”(不创建 SSIS)时都会失败。老实说,我很困惑这是如何发生的,并且愿意接受更多建议。

4

1 回答 1

0

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

由于我能够在打开时导入工作表,这让我认为我的问题是由于 SQL 和 Excel 之间的连接速度慢,所以我开始朝这个方向寻找。我在其他网站上发现了一些关于 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 Server 时,使用 (2009) SQL Server Native Client 10.0导入大型电子表格没有问题。这似乎只是更高版本的 Windows 的问题。我看到其他几个站点提到在 Windows 10 上使用 TCP 进行 ODBC 连接存在性能问题,而使用命名管道他们看到了明显的改进。由于我的生产服务器使用 TCP,我没有在我的开发机器上对命名管道进行更改,所以我无法确认这一点,但我想提一下,以防有人遇到这篇文章有这个问题。

于 2016-01-27T16:46:54.913 回答