SSIS Foreach循环容器只在设计环境中进行1次迭代

时间:2016-05-23 22:01:26

标签: ssis foreach-loop-container

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

我个人倾向于通过消息框发送FireInformation个事件,因为无论过程是在有人模式还是无人参与模式下运行,它们都可以正常运行。示例here

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我也遇到了这个问题,我做到了。

  1. 确保将变量放在ReadOnlyVariable字段中-您要在脚本任务内部的消息框中显示的字段。
  2. 在脚本任务中标记或删除此语句:Dts.TaskResult =(int)ScriptResults.Success;我认为这会影响流程,因为它会产生成功的结果。

希望有帮助。