我之前问过一个类似的问题(尽管特定于从 xp_cmdshell 运行包)。我对此事的最后评论是询问如果我想确保 SSIS 包参与事务,我的选择是什么。
那么,有什么方法可以让我执行一个 SSIS 包并让它参与到一个已经存在的事务中呢?
如果出于测试目的,我们想要这样做的原因是:
- 运行包以加载数据。
- 针对加载的数据运行测试。
- 将所有加载的数据回滚。
谢谢,斯图尔特。
我之前问过一个类似的问题(尽管特定于从 xp_cmdshell 运行包)。我对此事的最后评论是询问如果我想确保 SSIS 包参与事务,我的选择是什么。
那么,有什么方法可以让我执行一个 SSIS 包并让它参与到一个已经存在的事务中呢?
如果出于测试目的,我们想要这样做的原因是:
谢谢,斯图尔特。
互联网对这个问题的解决方案非常安静。我遇到了同样的问题,到处寻找解决方案。SSIS 对错误操作时生成的错误消息也没有帮助(未记录的错误代码)。答案可能有点晚,但希望它能帮助某人避免浪费时间。这就是最终为我工作的原因。
例如,在单元测试中,将整个过程包装在 TransactionScope 中:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew,new TransactionOptions(){IsolationLevel =IsolationLevel.ReadCommitted}))
{
Application app = new Application();
Package package = app.LoadPackage(packageFileName, null);
// Can set package settings for test
package.TransactionOption = DTSTransactionOption.Required;
package.IsolationLevel = IsolationLevel.ReadCommitted;
// Use this overload for execute
DTSExecResult result = package.Execute(null, null, null, null, TransactionInterop.GetDtcTransaction(Transaction.Current));
// Test results here inside the scope
}
当然,如果您想将数据添加到数据库中,您可以重新排列,然后通过 SSIS 提取它,然后在测试数据后回滚。