2017-03-09 82 views
1

我使用SQL Server 2016,我有一个SSIS包,其中我创建了一个FlatFile,其中dynamic Name在Loop中的一个DataFlow中。当它具有动态名称时,如何在SSIS中删除ControlFlow中的FlatFile?

为了创建我已经使用这个pathern名称: “SomeText” 则会+ DateTime + “SomeText” 则会

enter image description here

我已经创建了一个varibale像下面图片:

enter image description here

这是我的变数中的惊喜:

enter image description here

然后我就分配这个变量来我FLATFILE目的地的ConnectionString属性是这样的:在DataFlow

enter image description here

在某些情况下,我没有数据,我创建一个空文件,但我需要删除这个文件,当它是空的。正因为如此,我创建了一个变量,我用RowCount Component来填充这个变量。

enter image description here

后,在Control Flow,我已经把一个File System Task删除该文件,如果我的变量是0。(我的循环是基于对象)

enter image description here

但是我有一个问题,在DataFlow,当我想删除该文件时,FlatFile的名称将被更改,并且我找不到在DataFlow中创建的同一个文件。

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

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

+0

存储在一个变量的动态域名,那么你就会有它的任何地方 – FLICKER

+0

@FLICKER动态名称现在是在变,但我有这个问题。每次我们想要读取变量的值时,它都会被初始化,并且由于日期时间部分而需要新值 –

+0

请告诉我们您在何处/如何设置与数据流任务相关的文件名变量。如果它具有适当的范围(包级别),则不必重新初始化该变量。 – JiggsJedi

回答

2

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

由于您在表达式生成器中使用日期/时间,所以它会不断变化。使用脚本任务将允许您在循环迭代时捕获/存储日期/时间值,并将该值永久存储在整个循环中。

此脚本任务通常位于循环的顶部(第一个),它会在每次迭代时设置/更改文件名。

这里是如何做到这一点的例子: 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

0

把这个删除步骤放在每个循环中。带有通配符文件名掩码的Foreach File Enumerator。 For each

与输出字符串变量,这将是文件名,它的发现,你可以把你删除变量

+0

我没有在文件夹中的foreach。我的每个人都在一个物体上。在我的数据流的内部,我创建了具有动态名称的平面文件。然后如果文件是空的,我想删除我的文件,但我不知道什么是文件的名称。 –

相关问题