2

Foreachループ内のDataflowで数年間繰り返していますが、データを返さない年がいくつかあるため、SSISパッケージが失敗します。これを処理する方法はありますか?それらの空白を無視して実行を続けるようにパッケージに指示するには?

ありがとう、

4

2 に答える 2

2

Foreachデータがコンポーネントに渡される方法に触れたくない場合に使用できる1つのアプローチは次のとおりです。

  1. 処理するデータがあるかどうかを最初にチェックする追加のExecute SQL Taskコンポーネントをコンテナー内に含めることができます。Foreach

  2. たとえば、SQLタスクがレコード数を設定する変数を作成します@cntProceed

  3. このコンポーネントをDataflowタスクの前に実行するように設定します。

  4. 優先順位の制約を変更します(SQLタスクからDataflowタスクへの緑色の矢印)。、、、およびに設定evaluation operationしますExpression and ConstraintValueSuccessExpression@cntProceed != 0

これがすべて行うこと:foreachコンポーネント/コンテナー内で、処理するデータが存在するかどうかを最初にチェックします。これが追加コンポーネントが行うことであり、使用するデータがある場合は、データフローコンポーネントに進みます。それ以外の場合、それ"each"(またはむしろ..その1つのループ)は終了し、は次のループForeachに移動します。

于 2012-01-04T20:23:47.030 に答える
0

クエリが0行を返した場合にデータフローが失敗する理由がわかりません。考えられる解決策の1つは、有効な年のデータを調べて、有効な年だけを繰り返すことです。これは次の方法で実行できます。

  1. ForEachループコンテナの前にSQL実行タスクを作成します
  2. SQL実行タスクのResultSetを全行に設定します
  3. [結果セット]タブをオブジェクト変数に設定します
  4. ForEachループコンテナーをForEachADO列挙子に設定します
  5. ADOオブジェクトソース変数をオブジェクト変数に設定します
  6. 変数マッピングをその年の変数に設定します
  7. データフローへのパラメータとして年を渡します。

パッケージのコードを表示して投稿できますか?私はあなたが経験している問題を再現し、あなたの投稿されたニーズをより直接的に満たす解決策をあなたに与えることができるかどうか見てうれしいです。

于 2012-01-04T20:18:15.680 に答える