1

私は以前に漠然と同様の質問をしました(ただし、xp_cmdshellからパッケージを実行することに固有です)。この問題に関する私の最後のコメントは、SSISパッケージがトランザクションに参加することを保証したい場合、私のオプションは何かを尋ねることでした。

では、SSISパッケージを実行して、既存のトランザクションに参加させる方法はありますか?

テスト目的で次のことを行う場合の理由:

  • パッケージを実行してデータをロードします。
  • ロードされたデータに対してテストを実行します。
  • ロードされたすべてのデータをロールバックします。

ありがとう、スチュアート。

4

1 に答える 1

2

この問題の解決策について、インターネットは非常に静かです。私は同じ問題を抱えていて、どこでも解決策を探しました。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 経由で抽出し、データのテスト後にロールバックする場合は、これを再配置できます。

于 2012-09-14T06:08:10.147 に答える