当它具有动态名称时,如何在 SSIS 中删除控制流中的平面文件?

How can I delete in SSIS a FlatFile in ControlFlow when it has dynamic name?

我使用 SQL Server 2016 并且我有一个 SSIS 包,我在其中创建了一个 FlatFile 和一个 dynamic Name 在循环中的一个数据流中。

为了创建名称,我使用了这个路径: "SomeText" + DateTime + "SomeText"

我创建了一个如下图所示的变量:

这是我变量中的表达式:

然后我将此变量分配给 FlatFile Destination 的 connectionString 属性,如下所示:

在某些情况下,在 DataFlow 中,我没有数据,因此我创建了一个空文件,但我需要在它为空时将其删除。因此,我创建了一个变量,并使用 RowCount Component 来填充此变量。

Control Flow之后,如果我的变量是0,我放了一个File System Task用于删除文件。(我的循环是基于一个对象)

但是我有一个问题,在DataFlow中,当我想删除文件时,FlatFile的名称会被更改,我找不到与已创建的相同的文件在 DataFlow.

问题是当我想使用变量时,变量的值会在第二次改变。

如何删除在 DataFlow 中动态创建的 Control Flow 中的 Flat File

将删除步骤放入 for each 循环中。 Foreach 具有通配符文件名掩码的文件枚举器。

带有一个输出字符串变量,它将是找到的文件名,您可以将其放入删除变量

您需要使用脚本任务来设置变量值,而不是表达式生成器。

由于您在表达式构建器中使用 date/time,因此它会不断变化。使用脚本任务将允许您在循环迭代时 capture/store date/time 值,并在整个循环中持久存储该值。

此脚本任务通常位于循环的顶部(第一个),并且它会 set/change 每次迭代的文件名。

以下是如何执行此操作的一些示例: https://microsoft-ssis.blogspot.ca/2010/12/how-to-use-variables-in-script-task.html

如果您正在获取文件名中使用的数据流中的值,那么您可能需要使用脚本组件(转换)来更新数据流中的文件名。

以下是如何执行此操作的一些示例:https://microsoft-ssis.blogspot.ca/2011/01/how-to-use-variables-in-script.html