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