我有一个SSIS包,我在ForEach
循环中处理一些文件。
在循环中,我有一个数据流任务来完成处理。通过将循环的maxerror count
设置为0
,我确保即使存在错误文件,循环也不会停止。我尝试使用循环容器的ON ERROR
事件处理程序上的脚本任务在消息框中捕获错误。我得到三个而不是一个错误。
Popagate
在数据流的false
事件中设置为OnPostExecute
。
请帮忙。
主程序包 - 循环任务 - 数据流任务
答案 0 :(得分:1)
script task
on Error
事件处理程序中出现1个或多个错误的原因是因为如果容器的子控件内部出现任何错误,则会从{{{ 1}}到了Data Flow task
,而ForEach
更多地将package level
变量设置为propogate
在这种情况下不起作用,因为false
您在其子组件中设置为MaximumErrorCount
任何0 overrides
设置。
通常我尝试创建propogate
的{{1}}变量,并在DFT的事件处理程序的脚本任务中检查计数
ErrorCount
因此,通过这种方式触发第一次事件处理程序,它将变量type int
设置为1,因此DFT中的后续错误将使脚本任务中的IF条件失败。
如果您在ForEach循环中只有一个组件,我建议您使用以下任一方法
if (int.Parse(Dts.Variables["User::ErrorCount"].Value.ToString ()) == 0)
{
Dts.Variables["User::ErrorCnt"].Value = 1;
//Do your logging operation or any operation
}
属性
为ErrorCount
创建MaxErrorCount
。将event handler
变量设置为DFT
并编写上述代码以检查错误数。
我通常倾向于使用第二种方法而不是设置propogate
,因为这样可以更灵活地处理单个组件级错误
有关详细信息,请查看this MSDN链接,其中说明了SSIS中的事件处理程序如何工作