1

在使用 BIDS 和 SSIS 时,我和他们一样绿色,今天才开始。我想创建一个表并从 Access 数据文件中导入一些数据。我得到了它的工作,但我不得不继续删除部分结果,我认为将它全部包装在 Transaction 中会是一个好主意。我没有运行 MSDTC,所以我想我会使用手动事务。我尝试添加一个包含 BEGIN TRANS 的 Exectute T-SQL 任务,然后我又添加了两个带有 COMMIT TRANS 和一个带有 ROLLBACK Trans 的任务。如果数据流任务失败,它会回滚,否则它会提交。当它到达提交时,它总是说没有开始事务。包裹看起来像这样。这是否受支持,我只是缺少设置一些魔法属性来使其工作?

在此处输入图像描述

4

2 回答 2

1

由于这些任务中的每一个都是独立运行的,这就是您的开始/回滚/提交不起作用的原因。如果只想删除表中的所有数据,请在数据流任务失败时对表执行 TRUNCATE 语句。像这样加载时,我通常每次清表并填充,以测试数据流任务。

于 2012-04-20T15:40:12.587 回答
1

好的,这是我关于如何解决这个问题的建议。我通常会转换数据,以便在执行数据流加载到产品之前不需要回滚。所以我加载到一个临时表并在我考虑将某些东西放入生产表之前清理数据或删除不良记录或检查是否存在会导致回滚的东西。如果你有一些阻碍,它们应该在你投入生产之前很久就发生了。如果您只是想查找和处理格式错误的记录,临时表将允许您这样做,将坏数据发送到异常表等,所有这些都不会干扰 prod。当您拥有最终的数据流以进行生产时,就知道在这一点上一切都很好。我们进行了数千次导入,并且从不需要在 prod 级别回滚。

如果您真的非常想在 prod 级别回滚,您可以在执行 SQl 任务中进行导入,在使用数据流填充临时表之后,这是一个具有显式事务和 try catch 块的存储过程以回滚万一出错。

于 2012-04-20T15:52:36.213 回答