【问题标题】:Best way to import large excel file into SQL Server将大型 excel 文件导入 SQL Server 的最佳方法
【发布时间】:2015-09-07 08:01:27
【问题描述】:

我们正在尝试设计一种将超大 Excel 文件导入 SQL 数据库的最佳方法。使用 SSIS 有点麻烦,因为它会扫描顶部的 X 记录以确定文件的格式,但更靠下的行可能会有所不同,因此需要大量的试验和错误,我们必须将不寻常的列放在顶部所以 SSIS可以“学习”。

当我们导入新的文件格式时,它们在行格式等方面符合规范 - 所以我们可以说我们提前知道架构。 SQL 目标表具有相同的架构,但有几个额外的列,例如插入日期和原始文件名。

有没有更简单的方法来为我们要插入的新文件创建格式定义?我们不必使用 SSIS,我们对任何其他工具持开放态度,以期尽可能实现自动化。有一个测试我们将导入的数据的完整性的问题,我们计划对暂存数据集进行基本查询,例如“不到 1% 的记录可能会遗漏邮政编码”等。

非常感谢

【问题讨论】:

  • 文件必须在 Excel 中吗?如果可以导出为 CSV,则可以使用 BCP 将整行导入临时表中的单个记录,然后在其上运行存储过程以检查错误,以及上面提到的“学习”部分。然后你可以考虑从那里很容易地自动化它。
  • 有一个服务器级设置告诉 SSIS 扫描多少行以确定文件的格式。我忘记了设置的名称,但我确信它可以很容易地用谷歌搜索。
  • @TabAlleman 是正确的,您可以使用 TypeGuessRows=0 (jingyangli.wordpress.com/2009/02/13/…),但是大文件可能会出现性能问题,因为它会扫描整个文件。我建议将文件转换为分隔格式。大多数系统将不仅仅导出到 excel。
  • BCP 和 SSIS 的建议都为我们指明了正确的方向 - 非常感谢大家
  • 您也可以使用脚本任务并将文件中的所有内容作为文本读取,而不是使用 Excel 源。在以后的任务中适当地格式化它。 IMEX = 1 也可用于读取混合格式的数据

标签: sql-server csv ssis pentaho bcp


【解决方案1】:

也许您可以将数据作为文本导入,然后您可以使用派生列转换进行转换。您可以使用连接字符串中的 IMEX 选项以文本形式从 Excel 中读取数据。有关此参数的更多信息,您可以找到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2014-04-05
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多