使用しているSSISパッケージで非常に奇妙な状況に遭遇しました。
ループの前に入力されたレコードセットオブジェクトのすべてのレコードに対して実行されるデータフロータスクを含むforeachループがあります。
データフロータスクには、ADO.NETソース、ルックアップ、そして最後に宛先スクリプトコンポーネントがあります。スクリプトコンポーネントは、PreExecuteでデータテーブルを初期化し、入力から各行を追加し、postはデータテーブルをテーブル値パラメーターとしてストアドプロシージャに送信します。ルックアップタスクは、一致しない行のみをスクリプトコンポーネントに送信するように設定されています。
奇妙な状況は、ルックアップのすべての行が一致したときに、スクリプトコンポーネントがまだ実行されていて、0行が送信されていることを発見したことです。これにより、スクリプトコンポーネントが0行を超える行を受け取ったときにのみ呼び出されると予想していたため、ストアドプロシージャでエラーが発生しました。最初にデータが実際に渡されていることを確認することで、ストアドプロシージャ自体の問題を修正しました。
他のパッケージでは、ルックアップ後に宛先スクリプトコンポーネントが設定され、0レコードが渡されるという非常によく似た状況がありますが、この動作がそこで発生することはありません。唯一の違いは、それらがforeachループ内にないことです。
それで、将来の参考のために、0行が渡されたときに実行されるのがSSISスクリプトコンポーネントの予想される動作であるかどうかを本当に知りたいですか?