SSIS ForEach File循环-将文件名插入表

时间:2019-02-04 22:39:19

标签: sql-server ssis

我正在构建一个SSIS包(使用VS 2017)以从特定文件夹加载一堆CSV文件。使用ForEach File循环可以很好地工作。数据流任务具有平面文件源和OLE DB目标。我希望能够将文件名以及CSV文件中的数据保存在同一表中。我该怎么办?

非常感谢您的时间和帮助

2 个答案:

答案 0 :(得分:2)

如果要加载平面文件的整个文件路径,另一种方法是

  • 右键单击“数据流”标签中的“平面文件源”
  • 点击“显示高级编辑器”
  • 点击“组件属性”
  • 在“自定义属性”下,您将找到“ FileNameColumnName”。
  • 如果提供名称(例如:FlatFileName),则该名称将作为映射中的源输出列之一出现,其中包含文件名值(带文件名的完整路径)。可以将其映射到目标中的任何可用列,或使用“派生列”任务进行修改以仅获取文件名。

在我的开发中,我存储了大部分路径,这有助于我更好地进行跟踪。

遇到此问题的任何人都可以使用另一种方法,而不是使用ForEach循环,也可以使用更简单的方法

  • 右键单击连接管理器
  • 点击“新建连接”
  • 选择“ MULTIFLATFILE”连接类型,然后单击“添加”。
  • 在“连接管理器”编辑器中,插入位置并使用通配符*(例如:\\ ABC \ XYZ \ file _ *。txt)来选择该文件夹中的所有平面文件。
  • 这将自动循环浏览该文件夹中的所有平面文件。

希望这会有所帮助!

答案 1 :(得分:0)

ForEach文件枚举器可以捕获文件名并将其分配给变量,然后可以将其路由到连接管理器的连接字符串变量以进行动态加载。可以使用相同的方法将文件名写入数据库表。

在数据流中,添加一个“派生列”转换,并添加一个名为“ FileName”(或其他名称)的新列,然后将其值设置为ForEach File Enumerator为文件名设置的变量值。