SSIS 中的显式事务声明导致 'double' 回滚异常

Explicit transaction declaration in SSIS causes 'double' rollback exception

使用 SSIS,这是我的控制流程

但问题是: 当序列容器中发生异常并且流程转到失败路由时,我在回滚事务上收到错误消息,告诉我事务已经回滚。

以下是关键信息:

似乎我的事务被注册到分布式事务 (DTC) 中并被序列容器回滚,所以当我尝试自己回滚时,它生成了第二个异常,导致整个包失败。

我无法在我的本地计算机上重现该问题,只能在生产环境中重现。 有人知道吗?

这个问题的部分 answer/solution 是:

  • 交易会在 SQL 类型异常(例如:重复键等)事件发生时自动回滚。因此,流程的回滚部分仅在发生其他异常时使用。

我们如何管理此类行为?

  • 我们必须使用一些特定于数据库的命令(在我的例子中是 SQLServer)在回滚之前验证我们是否仍在事务中,否则我们会得到一个异常,试图回滚一个不存在的交易。

这是我的代码:

    IF @@TRANCOUNT > 0               
         Rollback Transaction TX_NAME;

希望有一天能对某人有所帮助 ;-)