次の方法で共有


Foreach ループ コンテナ

Foreach ループ コンテナは、パッケージ内で繰り返す制御フローを定義します。ループの実装は、プログラミング言語の Foreach ループ構造と同様です。パッケージでは、ループは Foreach 列挙子を使用することで有効になります。Foreach ループ コンテナは、指定した列挙子のメンバが処理されるたびに制御フローを繰り返します。

SQL Server 2005 Integration Services (SSIS) では、次の種類の列挙子が用意されています。

  • Foreach ADO 列挙子は、テーブル内の行を列挙します。たとえば、ADO レコードセット内の行を取得できます。
  • Foreach ADO.NET Schema Rowset 列挙子は、データ ソースに関するスキーマ情報を列挙します。たとえば、AdventureWorks SQL Server データベース内のテーブルを列挙して一覧を取得できます。
  • Foreach File 列挙子は、フォルダ内のファイルを列挙します。この列挙子は、サブフォルダをスキャンできます。たとえば、Windows フォルダとそのサブフォルダ内から、ファイル名に拡張子 *.log が付いたファイルをすべて読み取ることができます。
  • Foreach From Variable 列挙子は、指定した変数に含まれる列挙可能なオブジェクトを列挙します。列挙可能なオブジェクトは、配列、ADO.NET DataTable、Integration Services、列挙子などです。たとえば、サーバーの名前を含む配列の値を列挙できます。
  • Foreach Item 列挙子は、コレクション内のアイテムを列挙します。たとえば、プロセス実行タスクで使用する実行可能ファイルおよび作業ディレクトリの名前を列挙できます。
  • Foreach Nodelist 列挙子は、XML パス言語 (XPath) 式の結果セットを列挙します。たとえば、/authors/author[@period='classical'] の式は、古典時代のすべての作家を列挙して一覧を取得します。
  • Foreach SMO 列挙子は、SQL Server 管理オブジェクト (SMO) オブジェクトを列挙します。たとえば、SQL Server データベース内のビューを列挙して一覧を取得できます。

次の図は、ファイル システム タスクを含む Foreach ループ コンテナを示しています。Foreach ループは Foreach File 列挙子を使用し、ファイル システム タスクがファイルをコピーするように構成します。列挙子が指定するフォルダに 4 つのファイルが含まれる場合、ループが 4 回繰り返されて 4 つのファイルがコピーされます。

フォルダを列挙する Foreach ループ コンテナ

変数とプロパティ式を組み合わせて使用すると、パッケージ オブジェクトのプロパティを列挙子のコレクションの値で更新できます。最初にコレクションの値をユーザー定義変数にマップし、次に、変数を使用するプロパティにプロパティ式を実装します。たとえば、Foreach File 列挙子のコレクションの値を MyFile という変数にマップし、次に、この変数をメール送信タスクの Subject のプロパティ式で使用します。パッケージを実行すると、Subject プロパティは、ループが繰り返されるたびにファイルの名前で更新されます。詳細については、「パッケージでのプロパティ式の使用」を参照してください。

列挙子のコレクションの値にマップされた変数は、式とスクリプトでも使用できます。

Foreach ループ コンテナには複数のタスクとコンテナを含めることができますが、使用できる列挙子は 1 種類のみです。Foreach ループ コンテナに複数のタスクが含まれる場合、列挙子のコレクションの値は各タスクの複数のプロパティにマップできます。

Foreach ループ コンテナ上でトランザクションの属性を設定し、パッケージ制御フローのサブセットのトランザクションを定義できます。この方法により、トランザクションをパッケージ レベルではなく Foreach ループ レベルで管理できます。たとえば、Foreach ループ コンテナが、スター スキーマ内のディメンション テーブルおよびファクト テーブルを更新する制御フローを繰り返す場合、トランザクションを構成して、すべてのファクト テーブルが正しく更新されるようにしたり、ファクト テーブルを更新しないようにすることができます。詳細については、「パッケージへのトランザクションの組み込み」を参照してください。

列挙子の種類

列挙子は構成可能ですが、列挙子に応じて、それぞれ異なる情報を指定する必要があります。

次の表に、各種列挙子で必要な情報の概要を示します。

列挙子 構成要件

Foreach ADO

ADO オブジェクトの基になる変数と、列挙子モードを指定します。

Foreach ADO.NET Schema Rowset

データベースへの接続と、列挙するスキーマを指定します。

Foreach File

フォルダと、列挙するファイル、取得するファイルのファイル名の形式、およびサブフォルダをスキャンするかどうかを指定します。

Foreach From Variable

列挙するオブジェクトが含まれる変数を指定します。

Foreach Item

列や列のデータ型など、Foreach Item コレクション内のアイテムを定義します。

Foreach Nodelist

XML ドキュメントの基になる XML ドキュメントを指定し、XPath 操作を構成します。

Foreach SMO

データベースへの接続と、列挙する SMO オブジェクトを指定します。

Foreach ループ コンテナでのプロパティ式の使用

パッケージは、複数の実行可能ファイルが同時に実行されるように構成できます。プロパティ式を実装した Foreach ループ コンテナがパッケージに含まれるときは、この構成を注意して使用する必要があります。

多くの場合、Foreach ループ列挙子が使用する接続マネージャの ConnectionString プロパティの値を設定するには、プロパティ式を実装すると便利です。ConnectionString のプロパティ式は、列挙子のコレクションの値にマップした変数によって設定され、ループの反復ごとに更新されます。

ループ内のタスクの並列実行が非決定的なタイミングで行われるという不適切な結果を回避するには、一度に 1 つしか実行可能ファイルが実行されないようにパッケージを構成する必要があります。たとえば、パッケージが同時に複数のタスクを実行できる場合、フォルダ内のファイルを列挙する Foreach ループ コンテナでファイル名を取得してから SQL 実行タスクを使用してテーブルにファイル名を挿入すると、SQL 実行タスクの 2 つのインスタンスが同時に書き込もうとして、書き込みの競合が発生する可能性があります。詳細については、「パッケージでのプロパティ式の使用」を参照してください。

Foreach ループ コンテナの構成

プロパティを設定するには SSIS デザイナから行うか、またはプログラムによって設定します。

SSIS デザイナで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。

SSIS デザイナでこれらのプロパティを設定する方法の詳細については、次のトピックのいずれかを参照してください。

プログラムによる Foreach ループ コンテナの構成

プログラムによってこれらのプロパティを設定する方法の詳細については、次のトピックを参照してください。

参照

概念

パッケージの制御フローの作成
Integration Services コンテナ

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

新しい内容 :
  • Foreach ループでの変数とプロパティ式の使用に関する情報を追加しました。