SSIS onTaskfailed/OnErrorfailed 事件,无法捕获最近的错误
Posted
技术标签:
【中文标题】SSIS onTaskfailed/OnErrorfailed 事件,无法捕获最近的错误【英文标题】:SSIS onTaskfailed/OnErrorfailed Events, not able to capture recent errors 【发布时间】:2021-08-27 03:15:41 【问题描述】:SSIS 事件处理程序 onerrorfail 或 ontaskfailed 都未能捕获最近的错误消息。 情况 - 1.父包调用子包。 2.Parent 没有错误,但子包有错误,我正在尝试捕获这些错误。
Select TOP 1
A.package_name
,A.[Message]
FROM SSISDB.[catalog].[Event_messages] A
Where A.execution_path like '%Template%'
AND A.Event_name = 'OnError'
Order by A.Message_time desc
带有 OnError(事件处理程序)的 SQL 之上 - 检索以前的错误记录。 以上 SQL 与 onTaskfailed(event handler) - 检索以前的错误记录和最近的错误记录,因此电子邮件被触发两次。 为了停止多封电子邮件,我输入了 Counter 变量。 计数器变量解决了电子邮件问题,但它给出了以前的错误记录而不是最近的错误。准确地说,有一个错误,我不知道为什么它会给出过去的错误。尽管我必须处理多封电子邮件,但我也使用了日期过滤器,除了上面的 SQL 之外什么都没有。
上面的 SQL 有什么问题(基本和直截了当),为什么获取最近的记录会出现这样的问题?更好的处理方式?
【问题讨论】:
请有任何建议 如果错误没有被记录在首位,您的 SQL 将不会检索任何记录的错误消息... 记录了错误并且它确实检索了唯一的问题是,因为错误处理事件多次触发,所以它获取过去的错误消息以及最近的错误消息。我尝试了几种不同的 sql 消息来获取最近的错误,但没有任何效果。 能否提供 Event_messages 表中的数据样本? 提供您的样本输入和预期输出 【参考方案1】:我认为更好的方法是使用“事件处理程序”选项卡中的“OnError”事件处理程序来获取子程序包中的确切数据流或控制流(无论您的子程序包中有什么)。因为包失败是子包,你想捕获它的错误。因此,您可以在 OnError 中添加一个“执行 SQL 任务”,并使用“System::ErrorCode”和“System::ErrorDescription”(它们是系统变量)插入您喜欢的一个日志表中。你的插入命令应该是这样的“插入[table_name]([CodeColumn],[DscColumn])值(?,?);”你可以使用这些系统变量来捕捉你的错误。我也建议您使用一个日期时间列来更好地理解错误。我希望它对你有用。
【讨论】:
以上是关于SSIS onTaskfailed/OnErrorfailed 事件,无法捕获最近的错误的主要内容,如果未能解决你的问题,请参考以下文章
SSIS Union All - SSIS 中是不是存在针对此项目的错误?