SSIS事件处理程序

时间:2019-05-07 11:23:52

标签: sql-server ssis ssis-2012

请帮助我, 我正在尝试获取有关SSIS错误的信息 我使用事件处理程序。我尝试使用系统变量错误描述捕获错误 然后我将错误插入表中,但是此系统变量包含任务错误,我想在表上插入错误行而不是任务执行错误,因为它更具可读性

当我执行结果时,我有两行错误:

一个错误:XXX

和其他[执行任务]错误:XXX

enter image description here

信息:

  • 我无法使用软件包顶部树上的处理程序,因为我要处理其他错误。
  • 我在同一包装上的其他容器上使用了相同的机制
  • 我从控制流而不是数据流中捕获了错误

我正在使用事件处理程序,并且在事件上我有一个任务更新表设置comment =?其中id =?

enter image description here

非常感谢您

2 个答案:

答案 0 :(得分:2)

引起问题的是您的事件处理程序SQL:

update table set comment = ? where id = ?

您正在用第二个错误消息覆盖第一个错误消息。

要同时捕获它们,请使用INSERT

修改

如果只想插入第一条错误消息,则可以向SSIS包中添加一个Boolean变量,例如'ErrorSet',该变量在开始时设置为false。包装。然后,您可以将其传递给错误处理程序,并执行类似的操作(其中第一个?是'ErrorSet'):

IF ? = 0
    update table set comment = ? where id = ?
;

SELECT CAST(1 AS bit) ErrorSet

然后,将“ ErrorSet”结果写回到SSIS包变量中,这将防止进一步的更新发生。

您还可以通过使用不同的变量或将相同的变量重置回false来将其范围限制在包的不同区域。

答案 1 :(得分:1)

来自@ChrisMack的答案:

  

引起问题的是您的事件处理程序SQL:

update table set comment = ? where id = ?
     

您正在用第二个错误消息覆盖第一个错误消息。

我添加了一个表达式任务来强制将值直接放入表中。