1

我正在构建一个 SSIS 包并尝试实现事件处理程序。

我希望每当在整个过程中的任何地方发生错误时,都应该在具有System::SourceName、System::ErrorDescription 、 System::ErrorCodeSystem::ExecutionInstanceGUID的表中创建一个日志条目。

为此,我创建了一个表,如下所示:

CREATE TABLE [dbo].[ErrorLog]([LogID] [int] IDENTITY(1,1) NOT NULL,
[ExecutionID] [nvarchar](255) NULL,[SourceName] [varchar](255) NOT NULL,
[Message] [nvarchar](max) NOT NULL,
[MessageCode] [int] NOT NULL,
[LogDateTime] [datetime] NOT NULL
) ON [PRIMARY]

我在包级别创建了一个OnError事件处理程序。使用的 Sql 查询是 INSERT INTO [ErrorLog]([ExecutionID],[SourceName],[Message],[MessageCode],
[LogDateTime]) VALUES(?,?,?,?,getdate())

我面临的问题是,每当事件处理程序所做的包中的任何地方发生错误时,都会变为绿色,显示其调用,但数据库中的表不显示条目。

但是,我确信每次发生错误时都会插入一行,因为每当我在该表中手动创建新行时,都会添加一个新行,其中包含列 [LogID] 的下一个标识值。

例如,假设 LogID 列中的值为74并且包中发生错误,未添加任何行,并且当我在 ErrorLog 表中手动插入记录时,插入的标识为76

不知道出了什么问题。

我在这个修复中,非常感谢任何帮助。

谢谢莫希特

4

1 回答 1

1

这看起来像正在回滚插入。

你对你的包裹有交易控制吗?

为了测试,我会将组件上的事务支持属性设置为 onerror,甚至将触发错误的任务设置为 NotSupported。它表示该任务不会参与由包或任何其他父任务发起的任何事务。

于 2012-05-06T12:59:59.857 回答