我正在构建一个SSIS包并尝试实现事件处理程序。
我希望每当完整进程中的任何地方发生错误时,应该在表中使用 System :: SourceName,System :: ErrorDescription,System :: ErrorCode 和系统:: 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]
我在Package级别创建了一个 OnError 事件处理程序。
使用的Sql查询是
INSERT INTO [ErrorLog]([ExecutionID],[SourceName],[Message],[MessageCode],
[LogDateTime])VALUES(?,?,?,?,getdate())
我面临的问题是,无论何时,在包中的任何地方发生错误,事件处理程序确实变为绿色显示其调用,但数据库中的表不显示该条目。
但是,我确信每次发生错误时都会插入一行,因为每当我手动在该表中创建一个新行时,就会添加一个新行,并为列[LogID]添加下一个标识值。
例如,假设LogID列中的值为 74 ,并且包中发生错误,添加了NO行,当我在ErrorLog Table中手动插入记录时,插入的标识为 76 即可。
不确定出了什么问题。
我正处于这个问题,并且非常感谢任何帮助。
由于 莫希特
答案 0 :(得分:1)
这看起来正在回滚插件。
您的包装上是否有交易控制权?
要测试我会在onerror上的组件上设置事务支持属性,并将触发错误的任务设置为NotSupported。它表示任务不会参与由程序包或任何其他父任务启动的任何事务。