1

需要帮忙。我正在尝试自动发送邮件中的错误通知。为此,我正在查询 sysssislog 表。我在包事件处理程序“出错”上粘贴了一个“执行 SQl 任务”。出于测试目的,我故意尝试在由主键列组成的表中加载重复键(以便出错)。

但是,SSIS 在表中记录了 3,而不是只有一个错误“违反主键约束”。PFA 的屏幕截图也是如此。我怎样才能限制该工具只记录一个错误而不是多个???

包结构。

包(“错误事件处理程序”)-> DFT-> Oledb 源-> Oledb 目标

 SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.  An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80004005  Description: "The statement has been terminated.".  An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80004005  Description: "Violation of PRIMARY KEY constraint 'PK_SalesPerson_SalesPersonID'. Cannot insert duplicate key in object 'dbo.SalesPerson'.".  
  SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "input "OLE DB Destination Input" (56)" failed because error code 0xC020907B occurred, and the error row disposition on "input "OLE DB Destination Input" (56)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.  
  SSIS Error Code DTS_E_PROCESSINPUTFAILED.  The ProcessInput method on component "OLE DB Destination" (43) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (56). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.  There may be error messages posted before this with more information about the failure.  

请指导我。非常感激你的帮助。

谢谢

在此处输入图像描述

4

2 回答 2

1

尝试使用以下查询。

    SELECT *
    FROM dbo.sysssislog
    WHERE sourceid IN (SELECT DISTINCT sourceid FROM dbo.sysssislog WHERE event = 'PackageStart')

注意到 where 子句中的子查询了吗?通过这样做,我们将只选择具有出现在 PackageStart 事件中的 sourceid 的行。PackageStart 事件始终具有顶级 sourceid,而从不具有子组件 sourceid。因此,使用 where 子句,您可以有效地过滤掉所有子组件或“多个”错误消息。查看本文中查询的 FirstError 列。

于 2014-01-07T00:19:55.233 回答
0

通过设计所有任务级别的错误“冒泡”到包级别,因此您会看到多个错误。如果您只需要 1 条错误消息,则需要区分错误的来源,即说明错误的来源。这可以通过 SourceName 列(或者实际上是 TaskID)轻松完成。如果您使用开箱即用的日志记录,这些列可能不可用。不过,编写自定义日志记录脚本并不难。

于 2013-06-24T16:18:19.680 回答