【问题标题】:SSIS Foreach Loop Container only goes through 1 iteration in design environmentSSIS Foreach 循环容器在设计环境中只经过 1 次迭代
【发布时间】:2016-05-23 22:01:25
【问题描述】:

我有一个 ForEach 循环容器,它应该遍历 Ado 枚举器中的记录。编号模式 = 第一个表中的行。

我构建了一个脚本任务来为每次迭代编写一个 MessageBox。它仅显示第一次迭代的消息。之后它挂起。

我尝试构建解决方案并运行包,它工作正常。但在开发/设计领域它仍然挂起。

这就是它在设计模式下的工作方式吗?如果在调试时 Foreach 容器会挂起,我该如何测试它下游的东西?

【问题讨论】:

  • 你能在你的代码中添加一个调试点来单步执行,看看你是否得到了循环,但它只是没有点击消息框?老实说,由于其预期部署的性质,消息框实际上并不是您通常在 ssis 中看到的。你可以,但它确实不是调试 ssis 的最佳方法

标签: ssis foreach-loop-container


【解决方案1】:

当 SSIS 在 Visual Studio/BIDS/SSDT 中运行时,它似乎只是挂起,尤其是如果有脚本任务,请查看任务栏。 11/10 弹出一个对话框,表明您的代码中有错误。

当您弹出消息框时,第一个消息框会在打开时获得焦点,但后续消息框不会自动获得焦点。

我个人的偏好是FireInformation 事件而不是消息框,因为无论进程是在有人参与还是无人参与模式下运行,它们都可以正常工作。 here上的示例

【讨论】:

  • "当您弹出消息框时..." 意思不是错误已被标记,但难点是相同的 - 您的消息框在另一个窗口下。
【解决方案2】:

不,ForEachLoop 在设计模式下的工作方式与部署到服务器时的方式相同。如果您看到它只迭代一次,那么最可能的解释是只有一项需要迭代,而您的数据并不是您认为的那样。

正如评论中所建议的,您可以在循环之前和/或循环期间的某个点设置断点,并使用 Watches 来查看变量以查看它们的值。这应该可以让您了解为什么您的 ADO 对象只包含一个项目。

【讨论】:

    【解决方案3】:

    我也遇到过这个问题,我成功了。

    1. 确保将您的变量放入 ReadOnlyVariable 字段 - 您希望在脚本任务内的消息框中显示的字段。
    2. 在脚本任务中注释或删除此语句:Dts.TaskResult = (int)ScriptResults.Success;我认为它会影响过程,因为它给出了成功的结果。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多