Share via


Foreach ループ コンテナー

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

SQL ServerIntegration Services では、次の種類の列挙子が用意されています。

  • Foreach ADO 列挙子は、テーブル内の行を列挙します。たとえば、ADO レコードセット内の行を取得できます。

  • Foreach ADO.NET Schema Rowset 列挙子は、データ ソースに関するスキーマ情報を列挙します。たとえば、AdventureWorks2008R2SQL 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 のアイコン (小) 最新の Integration Services の入手

マイクロソフトが提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを定期受信します。