【问题标题】:SSIS - move only the files names returned in SQL commandSSIS - 仅移动 SQL 命令中返回的文件名
【发布时间】:2018-11-15 21:23:47
【问题描述】:

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

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

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

谢谢,

我也遇到了错误

【问题讨论】:

  • 如果您遇到错误,您应该告诉我们它是什么。错误代码和描述文字是什么?

标签: ssis


【解决方案1】:

这是 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 变量和适当的操作。

完成后,您应该有一个如下所示的包:

【讨论】:

  • 谢谢!效果很好。唯一缺少的是文件夹路径和文件名之间的 +"\\"+
  • 这很好解释。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-06-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多