【问题标题】:Rollback Transaction not working in SSIS回滚事务在 SSIS 中不起作用
【发布时间】:2015-07-09 08:49:34
【问题描述】:

我的 SSIS 包的 ForEach 循环中有以下序列容器:

我正忙于测试 ROLLBACK TRANSACTION 语句,它执行得很好,但没有回滚。

不确定我是否遗漏了什么?

提前致谢。

编辑:

这就是我的序列容器中数据流的样子:

【问题讨论】:

  • 你能展示你在 ForEach 循环容器组件中的代码吗?另外,Begin Bankmed 和 Rollback Bankmed 中的完整代码是什么?
  • 在您的连接管理器中,您是否指定了RetainSameConnection=true?默认为假。
  • @billinkc 是的,我已将该属性更改为 true
  • @G-Man 你读过这个:stackoverflow.com/questions/13626755/… 吗?和这篇文章:mssqltips.com/sqlservertip/1585/…
  • @JacquesBronkhorst 是的,我已经经历过。我无法使用包事务,我们的 SQL 管理员的设置方式存在问题。到目前为止唯一的解决方案是执行脚本任务

标签: ssis transactions


【解决方案1】:

我采取了另一种方法来确保我的故障转移工作正常。我所做的是我在我的表中添加了一个列来存储一个 GUID,当出现错误时,我只是从表中删除该 GUID 等于该会话中使用的记录的记录。我在我的 ForEach 容器将使用的 select 语句中添加了 GUID,然后将其写入表中。

SELECT
    ReconMedicalAidFile.fReconMedicalAidFileID
    ,ReconMedicalAidFile.fReconMedicalAidID
    ,ReconMedicalAids.fMedicalAidID
    ,ReconMedicalAidFile.fFileName
    ,ReconMedicalAidFile.fFileLocation
    ,ReconMedicalAidFile.fFileImportedDate
    ,ReconMedicalAidFile.fNumberRecords
    ,ReconMedicalAidFile.fUser
    ,ReconMedicalAidFile.fIsImported 
    ,CONVERT(varchar(50),NEWID()) AS 'Session'
FROM ReconMedicalAidFile 
INNER JOIN ReconMedicalAids ON ReconMedicalAidFile.fReconMedicalAidID = ReconMedicalAids.fReconMedicalAidID
WHERE (fIsImported = 0) AND (fNumberRecords = 0)

我在脚本任务中添加了这段代码,它将映射上面选定的 GUID:

DELETE FROM BankmedStatments
WHERE fSession = ?

DELETE FROM ReconMedicalAidData
WHERE fSession = ?

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    相关资源
    最近更新 更多