SSIS - Sql 事务回滚抛出错误

SSIS - Sql transaction rollback throwing error

我创建了一个 SSIS 2012 包,其中包含一个 for 循环容器 计划连续 运行(无限循环)以便它可以处理传入的 Excel 文件一旦被放入指定的放置目录。该处理涉及首先清除目标 SQL Server 2012 数据库 table 中的所有现有记录,然后将数据从 Excel 批量插入到 table。所以显然它需要维护事务,以便在批量插入失败(由于文件数据无效等)时回滚数据删除操作。

以下是 for 循环容器中的任务:

  1. Script Task 利用 C# FileSystemWatcher 监视 Excel 文件拖放文件夹。

  2. 使用以下语句执行 SQL 任务 :

Begin Transaction tran1;

  1. Data Flow Task with Excel Source 和 OLEDB destination 将数据从 Excel 插入到 SQL服务器数据库 table。此任务有一个 OnError 错误处理程序,它使用执行 SQL 任务将错误详细信息记录到用户定义的错误日志 table。

  2. 在上面的成功优先约束条件下,执行 SQL Task 使用以下语句:

Commit Transaction tran1;

  1. 在上面#3 的失败优先约束条件下,执行SQL 任务 使用以下语句:

Rollback Transaction tran1;

请注意,我无法使用默认的基于 DTC 的事务,因为数据库服务器中未启用 MSDTC。因此使用本机 SQL 事务。此外,我在所有 DB 相关任务中使用单个 OLEDB 连接管理器(它是一个远程 Sql 服务器数据库,因此使用 OLE DB)。 Oledb 连接管理器的 RetainSameConnection 属性 设置为 True。此外,所有与数据库相关的任务都将其事务选项设置为 Supported。 但是,在 运行 将包与带有无效数据的传入 Excel 文件结合使用时,回滚任务 #5 会抛出以下错误,并将其记录到错误日志 table 中:

ROLLBACK TRANSACTION请求没有对应的BEGIN TRANSACTION

我应该补充一点,对于有效的 Excel 文件,包 运行 可以正常完成提交事务(任务 #4),没有错误。 知道什么可能导致事务回滚抛出错误吗?

我能够通过将失败优先约束从 DFT 更改为从逻辑与回滚 EST 到 逻辑或 来解决这个问题。