我已经在网上许多人的建议下,在SSIS中创建了一个序列容器来保存我的所有子包,以便它还可以包含OnError事件,以汇总来自所有子包的所有错误。
在OnError事件中,我具有以下表达式任务,带有以下表达式:
@[User::AllFailureErrors] = @[User::AllFailureErrors] + "
Package: " + @[System::SourceName] +"
Description: "+ @[System::SourceDescription] +"
Error: "+ @[System::ErrorDescription]
它将所有错误汇总到一个字符串变量中,然后将其包含在电子邮件中。在大多数情况下,它工作得很好-它告诉我所有错误是什么,以及发生错误的任务(在子包中)。
但是我不知道如何捕获的一个是包含引发错误的任务的子程序包的名称。没有这些信息很难调试,而且我还没有弄清楚如何在不使用非常冗长的名称重命名所有子包中的所有任务的情况下得到它。
有人知道如何捕获吗?
请注意,我目前拥有SQL Server 2008 R2,但不久将升级到2014,据我了解它还具有其他一些SSIS日志记录功能。
答案 0 :(得分:0)
是的,可以通过在子程序包的OnError事件处理程序中使用脚本任务来设置父程序包中变量的值来进行操作。在子程序包中,将System::PackageName
系统变量分配给父程序包中的变量。它不会显示在“脚本任务”的“ ReadWriteVariables”字段中,但是键入父变量的名称将允许子程序包访问它。下一行是使用C#的示例,该示例将子程序包的名称分配给父程序包中的变量。分配后,子包的名称也将在父包的OnError事件处理程序中提供。
Dts.Variables["User::ParentPackageVar"].Value = Dts.Variables["System::PackageName"].Value;