我有一个SSIS包,它有一个foreach循环。在foreach循环中我有一个脚本任务。我已经在该脚本任务中放置了断点,该任务被点击但问题是,它只在第一次迭代时被击中。因此,如果F10或F5在第二次迭代时不再破坏。
如何在每次迭代的同一点上使它每次都断开。
答案 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设计器的“进度”选项卡上。有关更多信息,请参阅在脚本组件中引发事件。
将事件或用户定义的消息记录到已启用的日志记录提供程序。有关更多信息,请参阅记录脚本组件。
答案 1 :(得分:0)
我知道这是一个老问题,但我有一个想分享的想法
Guilherme回答说,我可以添加一些可能有用的内容,如果你的foreach基于SQL查询,你可以添加ROW_NNUMBER()
并将其分配给变量,在脚本任务中,您可以比较此变量的值,并在您想要的任何行上中断任务。
if (Dts.Variables["Your_Variable"].Value.ToString() == "4") {
Console.WriteLine("Break");
}
至少你可以停止迭代循环中的任何位置,而不是第一次迭代。