【问题标题】:Importing Large Excel Sheet into SQL将大型 Excel 工作表导入 SQL
【发布时间】:2016-01-15 20:28:37
【问题描述】:

我每月都会收到需要导入 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)时都会失败。老实说,我很困惑这怎么会发生,并愿意接受更多建议。

【问题讨论】:

  • 你查看过内存使用情况吗?
  • 您是否在 ETL 过程中使用 SSIS?
  • @KamranFarzami 是的,我的 CPU、内存和磁盘使用率都在 30% 或以下,并且在尝试导入时保持在该水平。
  • 不要直接从导入/导出向导运行导入,而是保存向导生成的 dtsx (SSIS) 包并在 Visual Studio 中打开;您可以在执行结果发生时观察它们。您可以在那里找到答案。
  • @MikeZalansky 我创建了 SSIS 包并按照您的建议运行它,并用结果更新了我的原始帖子。

标签: sql-server excel sql-server-2008-r2 odbc sql-import-wizard


【解决方案1】:

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

由于我能够在打开工作表时导入工作表,这让我认为我的问题是由于 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 可以工作是因为导入/导出使用了 AccessDatabaseEngine - 2007。

注意:在使用 Windows 7 或 2008 Server 时,使用 (2009) SQL Server Native Client 10.0 导入大型电子表格没有问题。这似乎只是更高版本的 Windows 的问题。我看到其他几个站点提到在 Windows 10 上使用 TCP 进行 ODBC 连接存在性能问题,他们看到使用命名管道得到了显着改进。由于我的生产服务器使用 TCP,我没有在我的开发机器上对命名管道进行更改,所以我无法确认这一点,但我想提一下,以防有人遇到这篇文章遇到这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多