2

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

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

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

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

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

控制流程

数据流

4

1 回答 1

1

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

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

(1) 使用FileNameColumnName属性

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

(2) 使用派生列变换

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

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


类似的问题:

于 2022-02-01T15:38:31.157 回答