在 SSIS Foreach 循环容器中提取文件名并更新 table

Extract filename and update table in SSIS Foreach Loop Container

我有一个 SSIS 包,它有这个 Foreach 循环容器(带文件枚举器),它从一个文件夹中读取多个 CSV 文件,然后将数据上传到平面 table。

这工作正常,但我的问题是还尝试提取文件的文件名,然后在插入一行后填充平面 table 中的最后一列。

我还在数据流任务之后添加了一个执行 SQL 任务(在 ForEach 循环容器内),希望它能在循环转到下一个文件之前立即执行,但不幸的是这不是行为。

execute SQL任务只会在全部读取完所有文件中的数据后执行。有没有办法逐行更新文件名,比如从CSV文件中读取一行,将这一行插入table,在同一个table中更新文件名列中的行,然后阅读下一行?以这种方式继续,直到 CSV 被完全读取,然后移动到下一个 CSV 文件并执行相同的操作。

我有编程背景,略微觉得嵌套 for 循环可能是一种方式,但不确定如何在 SSIS 中实现。我的 ForEach 循环容器的设置如下所示:

为什么使用执行 SQL 任务来添加文件名?!

您可以使用以下方法之一将文件名简单地添加到数据管道中:

(1) 使用 FileNameColumnName 属性

在数据流任务中,您只需在平面文件源上right-click,然后单击显示高级编辑器选项。

在平面文件源高级编辑器中,有一个名为 FileNameColumnName 的 属性。此 属性 用于向添加文件名的平面文件源添加一列。

您应该只写入列名称的值,它将被添加到平面文件源中。

(2) 使用派生列转换

您的问题可以通过在数据流任务中添加派生列转换来解决。然后,使用包含文件名的变量向数据管道添加一列。 (在 ForEach 循环容器的变量映射选项卡中使用的变量)

您可以在以下文章中了解有关派生列转换的更多信息:


类似问题:

  • How to find which flat file contains data errors while loading multiple flat files using Foreach File enumerator in SSIS