我正在尝试在 SSIS 中使用显式事务。我正在使用的数据库没有启用 DTC,所以我不能使用 SSIS 的内置事务处理。
我已经执行了 sql 任务来初始化、提交和回滚事务,但是尽管将“RetainSameConnection”设置为 true,我仍然收到以下错误:
[执行 SQL 任务] 错误:执行查询“ROLLBACK;” 失败并出现以下错误:“ROLLBACK TRANSACTION 请求没有相应的 BEGIN TRANSACTION。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。
事实证明,我做了一件非常愚蠢的事情。
事实证明,我的 SSIS 包非常完美,我已命名事务并将“RetainSameConnection”设置为 true。开始/提交/回滚命令均已正确指定。
我的问题是,作为 SSIS 包的一部分调用的存储过程之一有一个未命名的事务,一旦调用该存储过程中的提交,就会导致 SQL Server 提交所有内容。
解决方案是修改存储过程以命名事务,以便 SQL Server 将该事务视为嵌套事务(理论上,我本以为第二个“开始事务”语句会这样做,但由于某种原因这没有发生)。