【问题标题】:SSIS 2008 - ForEach Loop to look at specific group/list of filesSSIS 2008 - ForEach 循环查看特定组/文件列表
【发布时间】:2016-04-29 21:55:31
【问题描述】:

我一直在互联网上搜索我认为可以直接回答的问题。希望大家帮忙?

我使用每个循环来查找特定文件并将它们与文件系统任务一起移动到不同的文件夹。

假设我有 10 个 csv 文件。称为列出的A到J

我只想移动 a、e 和 j,但似乎无法让 foreachloop 查找该组。

在枚举器文件文本框中,我尝试插入由各种分隔符分隔的 3 个文件名,但 SSIS 认为它全部是一个特定文件,并且 3 个都没有移动。

有人可以建议如何完成吗?只是为了确认一下,我不使用通配符逻辑只是一组特定的文件名 - 类似于 SQL 查询的 IN 函数

提前致谢

now added img - please advise how to slect 3 specific files in the text box with arrow

【问题讨论】:

  • 最好实际显示您尝试过的代码而不是描述它。
  • 将要循环的文件名放入 SSIS 对象中。然后使用 ForEach 容器仅移动这些文件。
  • NoChinDeluxe - 我现在已向请求添加图像 - 显示我正在尝试选择一组文件的多个版本的文本框
  • FreakyHat - 请您告知哪个 SSIS 对象?我希望他 foreachloop 做的只是通过特定的文件列表而不是通配符方法运行。文本字段中是否无法指定 3 个文件?

标签: csv ssis grouping foreach-loop-container


【解决方案1】:

由于 OP 无法继续我的评论,我会更详细地解释一下 -

  1. 使用EXECUTE SQL TASK 将所需文件的名称转储到SSIS 对象中(为此,您可以使用存储过程或SQL 查询)。之前在变量选项卡中创建一个对象类型变量,将EXECUTE SQL TASK 中的输出更改为Full Result Set 并将结果映射到您刚刚创建的对象。现在这个对象保存了你需要循环的文件列表。
  2. 现在从 SSIS 工具箱中拖放一个 ForEach 容器。它应该配置为ForEach ADO Enumerator 并将对象映射到它。创建另一个字符串类型的变量,该变量将在 ForEach 容器的每次迭代后保存文件名。在 ForEach 容器的 Variables 选项卡中也映射它。
  3. 现在,将用于将这些文件移动到 ForEach 循环中的 File System Task 放置。使用您创建的文件名变量来移动所需的文件。

现在,如果您不确定在第 1 步中为您的案例使用什么 SQL 查询来获取 3 个文件名 -

SELECT 'A.csv'
UNION
SELECT 'E.csv'
UNION 
SELECT 'J.csv'

【讨论】:

  • 所以,只是为了确认。使用我通常使用 *.csv 的 ForEachLoop 的文本框(请参阅 OP 上的 img)。我不能简单地列出那里的 3 个文件?
  • 我不知道。我只看到您提到的文本框中使用了通配符。无论您输入什么,都将被视为文件名,因此如果没有通配符,它​​将只是一个文件,ForEach 容器的整个点都会丢失。
  • 谢谢。我尝试了您的步骤,但在执行 SQL 任务对象上出现错误。创建的对象变量称为对象。创建的执行 sql 任务放入完整的结果集。当我回到家时将发送错误截图。您能否提供执行 sql 任务的屏幕截图,以确保我已正确完成所有操作?
  • 一切似乎都对,我没有什么要补充的了。错误详情?
  • [执行 SQL 任务] 错误:对于完整的结果集和 XML 结果,结果绑定名称必须设置为零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多