【问题标题】:ssis transaction with out Msdtc没有 Msdtc 的 ssis 事务
【发布时间】:2016-06-07 12:07:56
【问题描述】:

其中一个包将使用 没有 MSDTC 的 SQL Server Integration Services SSIS 事务。

Execute SQL 任务已放置在开始事务的数据流(Df_insert)之前。有几个更新步骤和索引创建步骤,在此第一个数据流(Df_Insert)之后。有一个更新脚本在另一个序列中容器并且 , 需要成为此交易的一部分。

有没有办法只包含 Df_insert 和更新脚本 在交易中。

控制流程如下所示

【问题讨论】:

  • 第一个容器不是FEL,是Sequence容器。错误见谅

标签: sql-server ssis transactions ssis-2012 ssis-2008


【解决方案1】:

从 SQL 事务的角度来看,BEGIN TRAN 和 COMMIT 之间的所有 DML 语句,即 inserts-updates-deletes 都是该事务的一部分,并且不可推断。您的任务 - 仅提交 DFTupdate script - 意味着 updateupdate2delete 是在您的 update script 中使用的临时数据,稍后将被丢弃。
方法 - 修改你的逻辑,将updateupdate2 和可能的delete 结果移动到 TEMP 表中,然后使用它。常规 #temp_table 会很好,因为您必须在没有 MSDTC 的情况下使用 RetainSameConnection=true 进行事务。

【讨论】:

  • 谢谢 .update、update2 和 delete 不是脚本中使用的临时数据。它确实更新了一个源表并从另一个表中删除了一些东西。只是想知道有没有其他方法可以在不移动的情况下实现这一点更新、更新2和删除的结果!?
  • 正好相反。您在 update、update2 和 delete 语句中创建/修改了一些数据源和其他表(删除创建 minus 数据)。此数据以某种方式用于您的 SCRIPT。您可以将这些数据卸载到某个地方并在以后丢弃它。替代方法是使用 SELECT INTO #Temp 将数据从您的源存储到 #Temp 表中,执行所需的数据操作并执行您的 SCRIPT。无论如何,如果不了解您的数据操作,就很难判断。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多