1

私はグーグルで調べて、私が見たほぼすべての提案を試したと思いますが、これを思い通りに機能させることができないようです. 私は、SSIS がこれを実行できると確信しています。

4 つのタスクを持つ SSIS パッケージがあり、タスク A、B、C の順に実行されます。4 番目のタスク DI は、B が失敗した場合にエンドポイントとして使用しています... 詳細については、後ほど説明します。

タスク A は、無関係な作業を行います。パッケージの開始時に処理があり、いずれかが失敗した場合、パッケージを失敗させたいので、それを含めています-SSISのデフォルトだけで、タスクAが失敗した場合はリターンコード1でパッケージを終了します.

B はフラット ファイル ソースを持つ DFT であり、ステップ C で処理されるデータを転送します。タスク B のエラーを他のタスクとは異なる方法で処理したいので、B が私の質問の核心です。フラット ファイル ソースが存在しないか破損していることは珍しくありません。パッケージ全体が失敗する原因とならないように、それをキャプチャ/トラップしたいと考えています。ただし、B にエラーがある場合は、タスク C を処理したくありません。

B にエラーがない場合、C は DFT B で転送したデータを処理します。

電子メールを送信する SQL タスクを実行する「OnError」イベント ハンドラを使用して、DFT-B でエラーをトラップしています。次に、「完了時」の優先順位制約を使用して、制御フローをエンドポイント (タスク D) に迂回させます (D は何もしません。部分的にデバッグ用に使用しているダミーのエンドポイントであり、部分的にイベント ハンドラーをどこかに与えるためです)。 「行く」 - Dが必要かどうかはわかりません)。

とにかく、パッケージを実行して B でエラーをトリガーすると、パッケージはイベント ハンドラーを実行し (電子メールを正常に送信します)、タスク "D" に進み、デバッガーでは "D" が成功して終了します (ショー緑)。問題は、パッケージが終了コード「1」で失敗することです。

いろいろいじってみました... ForceExecutionValue/ ForceExecutionResult/ MaximumErrorcount. 現在、実際には「タスク D」にさえ続かないパッケージがあり、どうやってそこにたどり着いたのかわかりません (ただし、例外ハンドラ SQL は忠実に電子メールを送信しています!)。

その終了コード 1 は必要ありません。0が欲しい!

ヘルプ!ありがとう!

4

1 に答える 1

0

次のようなことを試しましたか:

条件付きフロー

遷移線のさまざまな条件を取得するには、編集したい線をダブルクリックします。赤い線は、前のタスクが失敗した場合の制御フローを示します

編集:質問を読み間違えたと思います!私が得たものから、意図したとおりにフローを制御できます。あなたの問題には終了コードが伴います。propagateイベント ハンドラー画面で変数を false に設定してみましたか?

詳細については、次のリンクを確認してください: http://simonworth.wordpress.com/2009/11/11/ssis-event-handler-variables-propagate/

于 2012-06-14T16:25:10.447 に答える