每个循环的SSIS传播不起作用

时间:2017-02-23 13:18:59

标签: ssis ssis-2008 event-propagation foreach-loop-container

我有一个循环通过连接循环。每个循环连接到不同的连接,然后加载表等。在第二步中它连接然后将数据加载到DWH中。有时连接因任何原因而关闭,并且在此步骤中将失败。我需要包来继续这个连接失败。

我已经读了很多关于propogate设置为false的东西,但这仍然无效。正如你在我的屏幕截图中看到的,我有"加载......" onError事件处理程序propogate设置为false,并且Sequence容器onError propogate设置为false。

我还尝试将序列容器最大错误设置为0以便该部分完成,并且在"加载..."的onError上。在变量中设置一个标志,以便在连接完成时继续运行,或者在连接失败时停在那里。

我在过去已经完成了这项工作,并且只是在完成时将整个包完成状态设置为成功,但是这不会捕获此循环中可能发生的其他错误,我将需要捕获/失败包。

任何帮助都将不胜感激。

enter image description here

1 个答案:

答案 0 :(得分:2)

对连接失败进行更多研究,我找到了Jamie Thomson撰写的一个脚本:Verify a connection before using it [SSIS]

我根据自己的用法修改了一下:

  1. 仅使用单个连接而不是遍历所有连接。
  2. 我将任务结果设置为始终成功。
  3. 而不是FireError我做了FireWarning
  4. 我创建了一个变量(connFail),设置为0或1,具体取决于连接是否失败。
  5. 我将此脚本任务放在我的表加载之前,以在执行任务之前捕获任何失败的连接。这些修改允许我在连接失败(connfail = 1)时触发电子邮件警报,或者如果连接成功则继续在包上(`connFail = 0')。

    我使用的完整脚本如下:

    bool failure = false;
    bool fireAgain = true;
    
    try
    {
        Dts.Connections["Connection"].AcquireConnection(null);
        Dts.Events.FireInformation(1, ""
            , String.Format("Connection aquired successfully on '{0}'", Dts.Connections["Connection"].Name)
            , "", 0, ref fireAgain);
    }
    catch (Exception e)
    {
        Dts.Events.FireWarning(-1, ""
            , String.Format("Failed to aquire connection to '{0}'. Error Message='{1}'",Dts.Connections["Connection"].Name, e.Message)
            , "", 0);
        failure = true;
    }
    
    if (failure)
    {
        Dts.TaskResult = (int)ScriptResults.Success;
        Dts.Variables["connFail"].Value = 1;
    }
    else
    {
        Dts.TaskResult = (int)ScriptResults.Success;
        Dts.Variables["connFail"].Value = 0;
    }