SSIS-仅移动SQL命令中返回的文件名

时间:2018-11-15 21:23:47

标签: ssis

我有一条SQL语句,该语句返回600个PDF文件名,我需要使用这些文件名将文件副本从文件夹中移到新文件夹中(SQL中的文件名是该文件夹中PDF文件的确切名称)

我设置了一条执行SQL语句,该语句将PDF名称结果集传递给一个变量。

如何使用此变量传递给文件系统任务,以仅复制SQL语句中返回并传递给变量的PDF文件名?

谢谢

我也犯了错误

1 个答案:

答案 0 :(得分:3)

这是SSIS中非常简单的设计模式。一般来说,您可以从Execute SQL Task获取文件名列表,设置Foreach Loop Container来处理每个文件,并在循环内创建一个File System Task

首先,请确保您具有以下变量:

VariablesList

我正在使用E:\Import\作为源文件夹。那就是我希望所有文件都存放的地方。您可以将其更改为文件所在的文件夹。我想将文件移动到子文件夹中,因此将DestinationFolder设置为E:\Import\Internal\。同样,请更改此设置以适合您的需求。

此外,您可以看到我们有一个Filenames类型的System.Object变量。这是ADO对象,将保存我们的SQL查询结果。在循环中,Filename字符串变量将用于存储每个文件名。

SourcePathDestinationPath,我们将配置为由表达式填充。我们将文件夹名称与文件名连接起来。为此,请打开变量窗口,然后单击SourcePath。然后编辑Properties并将EvaluateAsExpression设置为True,然后将表达式设置为@[User::SourceFolder] + @[User::Filename]。使用表达式中的DestinationPath@[User::DestinationFolder]进行相同的操作。您应该以两个*Path变量结尾,如下所示: SourcePath SourcePathExpression DestinationPath DestinationPathExpression

现在,我们可以配置Execute SQL Task。确保将ResultSet的值设置为Full result set并将等于Result Name的{​​{1}}的结果映射到ADO对象变量0ExecuteSQL ResultSet

接下来,创建一个Filenames并将其配置为使用Foreach Loop Container类型,并将其指向您的Foreach ADO Enumerator变量。 Foreach

转到Filenames并确保将Variable Mappings映射到User::FilenameForeachVarMap

最后,创建一个Index 0并将其放入循环容器中。然后将其配置为通过适当的操作使用File System Task变量。 FST

完成后,您应该拥有一个看起来像这样的软件包: FinalPackage