每个循环的 SSIS 传播不起作用
SSIS for each loop propagate not working
我有一个通过连接循环的循环。每个循环连接到不同的连接,然后加载表等。在第二步中,它连接然后将数据加载到我们的 DWH 中。有时连接会因为某种原因而中断,并且会在这一步失败。我需要这个包来继续这个连接失败。
我已经阅读了很多关于将传播设置为 false 的内容,但这仍然不起作用。正如您在我的屏幕截图中所见,我将 "Load ..." onError 事件处理程序传播设置为 false,并将序列容器 onError 传播设置为 false。
我还尝试将序列容器最大错误设置为 0,以便该部分完成,并在 "Load ..." 的 onError 上设置变量中的标志,以便在连接完成或停止时继续运行如果连接失败。
我过去曾这样做过,只是在完成时将整个包的完成状态设置为成功,但这不会捕获此循环中可能发生的其他错误,我需要捕获/使包失败。
如有任何帮助,我们将不胜感激。
在对连接失败进行更多研究后,我发现了 Jamie Thomson 的脚本:Verify a connection before using it [SSIS]。
我根据自己的用法稍微修改了一下:
- 只使用一个连接而不是循环所有连接。
- 我设置任务结果总是成功
- 我做了
FireWarning
而不是 FireError
。
- 我创建了一个变量 (
connFail
),根据连接是否失败设置为 0 或 1。
我将此脚本任务放在 table 加载之前,以便在执行任务之前捕获任何失败的连接。这些修改允许我在连接失败时触发电子邮件警报 (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;
}
我有一个通过连接循环的循环。每个循环连接到不同的连接,然后加载表等。在第二步中,它连接然后将数据加载到我们的 DWH 中。有时连接会因为某种原因而中断,并且会在这一步失败。我需要这个包来继续这个连接失败。
我已经阅读了很多关于将传播设置为 false 的内容,但这仍然不起作用。正如您在我的屏幕截图中所见,我将 "Load ..." onError 事件处理程序传播设置为 false,并将序列容器 onError 传播设置为 false。
我还尝试将序列容器最大错误设置为 0,以便该部分完成,并在 "Load ..." 的 onError 上设置变量中的标志,以便在连接完成或停止时继续运行如果连接失败。
我过去曾这样做过,只是在完成时将整个包的完成状态设置为成功,但这不会捕获此循环中可能发生的其他错误,我需要捕获/使包失败。
如有任何帮助,我们将不胜感激。
在对连接失败进行更多研究后,我发现了 Jamie Thomson 的脚本:Verify a connection before using it [SSIS]。
我根据自己的用法稍微修改了一下:
- 只使用一个连接而不是循环所有连接。
- 我设置任务结果总是成功
- 我做了
FireWarning
而不是FireError
。 - 我创建了一个变量 (
connFail
),根据连接是否失败设置为 0 或 1。
我将此脚本任务放在 table 加载之前,以便在执行任务之前捕获任何失败的连接。这些修改允许我在连接失败时触发电子邮件警报 (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;
}