2017-02-23 27 views
2

我有一个循环通过连接循环。每个循环连接到不同的连接,然后加载表格等。第二步是连接数据,然后将数据加载到DWH中。有时候,连接因为任何原因而关闭,并且在这一步将失败。我需要该软件包继续保持此连接失败。SSIS为每个循环传播不工作

我已经阅读了很多关于propogate设置为false的东西,但这仍然不起作用。正如你在屏幕截图中看到的,我将“Load ...”onError事件处理程序propogate设置为false,并将Sequence容器onError propogate设置为false。

我也尝试设置序列容器的最大错误为0,以便该部分完成,并在“负载...”的onError设置一个变量中的标志继续进行,如果连接完成或停止如果连接失败。

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

任何帮助在这里将不胜感激。

enter image description here

+0

您是否尝试过FailParentOnFailure''设置为False? – NickyvV

+1

我确实把所有这些设置为false,但它仍然没有区别。我想到了之后。请参阅下面的答案。 – Caveman42

回答

2

上做连接失败的更多的研究,我发现了一个脚本,由杰米·汤姆森:Verify a connection before using it [SSIS]

我修改了一点我自己的使用情况:

  1. 只用单一的连接,而不是通过所有这些循环。
  2. 我将任务结果设置为始终成功。
  3. 而不是FireError我做了一个FireWarning
  4. 根据连接是否失败,我创建了一个变量(connFail)以设置为0或1。

我将这个脚本任务放在我的表加载之前,以在执行任务之前捕获任何失败的连接。如果连接失败(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; 
}