我有一条SQL语句,该语句返回600个PDF文件名,我需要使用这些文件名将文件副本从文件夹中移到新文件夹中(SQL中的文件名是该文件夹中PDF文件的确切名称)
我设置了一条执行SQL语句,该语句将PDF名称结果集传递给一个变量。
如何使用此变量传递给文件系统任务,以仅复制SQL语句中返回并传递给变量的PDF文件名?
谢谢
我也犯了错误
答案 0 :(得分:3)
这是SSIS中非常简单的设计模式。一般来说,您可以从Execute SQL Task
获取文件名列表,设置Foreach Loop Container
来处理每个文件,并在循环内创建一个File System Task
。
首先,请确保您具有以下变量:
我正在使用E:\Import\
作为源文件夹。那就是我希望所有文件都存放的地方。您可以将其更改为文件所在的文件夹。我想将文件移动到子文件夹中,因此将DestinationFolder
设置为E:\Import\Internal\
。同样,请更改此设置以适合您的需求。
此外,您可以看到我们有一个Filenames
类型的System.Object
变量。这是ADO对象,将保存我们的SQL查询结果。在循环中,Filename
字符串变量将用于存储每个文件名。
SourcePath
和DestinationPath
,我们将配置为由表达式填充。我们将文件夹名称与文件名连接起来。为此,请打开变量窗口,然后单击SourcePath
。然后编辑Properties
并将EvaluateAsExpression
设置为True
,然后将表达式设置为@[User::SourceFolder] + @[User::Filename]
。使用表达式中的DestinationPath
对@[User::DestinationFolder]
进行相同的操作。您应该以两个*Path
变量结尾,如下所示:
现在,我们可以配置Execute SQL Task
。确保将ResultSet
的值设置为Full result set
并将等于Result Name
的{{1}}的结果映射到ADO对象变量0
。
接下来,创建一个Filenames
并将其配置为使用Foreach Loop Container
类型,并将其指向您的Foreach ADO Enumerator
变量。
转到Filenames
并确保将Variable Mappings
映射到User::Filename
。
最后,创建一个Index 0
并将其放入循环容器中。然后将其配置为通过适当的操作使用File System Task
变量。