SSIS脚本任务中的断点,位于ForEach循环内

时间:2014-01-23 17:50:51

标签: ssis task breakpoints

我有一个SSIS包,它有一个foreach循环。在foreach循环中我有一个脚本任务。我已经在该脚本任务中放置了断点,该任务被点击但问题是,它只在第一次迭代时被击中。因此,如果F10或F5在第二次迭代时不再破坏。

如何在每次迭代的同一点上使它每次都断开。

2 个答案:

答案 0 :(得分:1)

这似乎是SSIS的预期行为,如联机丛书中所述:

“如果脚本任务是Foreach循环或For循环容器的一部分,则调试器会在循环的第一次迭代后忽略脚本任务中的断点。”

http://technet.microsoft.com/en-us/library/ms137625.aspx

您可以尝试使用以下替代方法解决此问题:

  • 中断执行并使用System.Windows.Forms命名空间中的MessageBox.Show方法显示模式消息。 (完成调试过程后删除此代码。)

  • 提升信息性消息,警告和错误的事件。 FireInformation,FireWarning和FireError方法在Visual Studio“输出”窗口中显示事件描述。但是,FireProgress方法,Console.Write方法和Console.WriteLine方法不会在“输出”窗口中显示任何信息。来自FireProgress事件的消息显示在SSIS设计器的“进度”选项卡上。有关更多信息,请参阅在脚本组件中引发事件。

  • 将事件或用户定义的消息记录到已启用的日志记录提供程序。有关更多信息,请参阅记录脚本组件。

http://technet.microsoft.com/en-us/library/ms136033.aspx

答案 1 :(得分:0)

我知道这是一个老问题,但我有一个想分享的想法

Guilherme回答说,我可以添加一些可能有用的内容,如果你的foreach基于SQL查询,你可以添加ROW_NNUMBER()并将其分配给变量,在脚本任务中,您可以比较此变量的值,并在您想要的任何行上中断任务。

if (Dts.Variables["Your_Variable"].Value.ToString() == "4") {
    Console.WriteLine("Break");
}

至少你可以停止迭代循环中的任何位置,而不是第一次迭代。