【问题标题】:What is the best way of loading different csv files into different SQL Server tables using SSIS?使用 SSIS 将不同的 csv 文件加载到不同的 SQL Server 表中的最佳方法是什么?
【发布时间】:2016-04-05 06:50:32
【问题描述】:

我应该重复使用相同的平面文件连接管理器还是应该为每个要导入的文件放置单独的平面文件连接管理器?

说明:

我有 30 个不同结构的 CSV 文件,我需要将这些文件导入 SQL Server 数据库。

目前我为每个平面文件源使用单独的平面文件连接管理器。然后使用 OLEDB Destination 将数据推送到 SQL Server 数据库中。

我应该重复使用同一个平面文件连接管理器吗?

你能指导我 - 怎么做?任何链接都会有所帮助。

【问题讨论】:

  • 这些答案对你有用吗?
  • 假设您的 30 个 CSV 文件映射到 30 个表是否正确?如果是这样,单独的连接将是可行的方法,否则您可能需要考虑一些预处理(取决于文件大小)以使它们成为相同的格式

标签: sql-server csv ssis ssdt-bi


【解决方案1】:

由于文件之间的结构不同,您应该使用单独的连接。这允许您正确定义每个文件类型的列名、大小和数据类型。

【讨论】:

  • 听起来是最好的选择,我过去做过这个
【解决方案2】:

我认为您可以使用MultiFaltFile 作为源连接管理器。使用它,您可以一次选择多个文件。

请看下面的链接:

http://www.sqlservergeeks.com/sql-server-import-multiple-files-in-ssis-using-multi-flat-file

【讨论】:

  • 我不认为这是 OP 的一个选项,因为文件之间的结构不同。
【解决方案3】:

而不是创建 30 个平面文件连接,只需在 Foreach 循环容器中使用一个,传递文件名的表达式。

为了解决 CSV 文件格式不同的问题,当您创建平面文件连接时,选择 Ragged right 而不是 delimited,这会将文件中的每一行视为一个非常宽的列而不是多个字段(确保您使列足够宽以处理您的文件)。

然后,您可以将平面文件源的输出发送到脚本组件,您可以在其中放置处理文件的所有逻辑。使用正则表达式或拆分将每一行转换回字段,然后您就拥有 C# 的全部功能来处理每一行。脚本组件也可以有多个输出,因此您甚至可以像条件拆分一样使用它。

这似乎需要更多的工作(取决于或您的文件是什么样的以及您如何处理它们),但最终结果是移动部件更少。

【讨论】:

  • 如果我当前使用批量插入加载文件,如果我必须处理 C# 脚本中的每一行,它会显着减慢我的进程吗?我是否只需使用脚本创建一致的格式,然后仍然能够批量插入?我现在需要处理文件的多种格式,这由其中一个表的列中的值指示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2014-11-09
  • 2017-01-09
  • 2019-08-13
  • 1970-01-01
  • 2019-09-02
相关资源
最近更新 更多