ForeachコンテナのForeach ADO 列挙子を使う

Pocket

前回Foreach コンテナの Foreach File 列挙子について覚書を書いておきました
次に良く使うForeach ADO 列挙子についての覚書

SELECTの結果を取得し、その結果を使ってループで回したい時ってありますよね
こんな時、SSIS の Foreach コンテナを使って簡単にできます

SQL実行タスクで取得したObject変数@[User::MemoList]でループさせることを例とします
まずは、SQL実行タスクで完全な結果セットを作る方法を読んだ方が良いと思います

今回は下記のテーブルの結果をSQL実行タスクで SELECT した結果を@[User::MemoList] に入れている前提です

[TABLE=4]

制御フロー上のForeach ループコンテナを編集すると Foreach ループエディタが開きます。
エディタの左側に「全般」、「コレクション」、「変数のマッピング」、「式」があります。

最初に「コレクション」を選択します。
コレクションでは、3箇所設定を行います。
一ヶ所目にウィンドウ右側に Enumerator の項目が出てきます。
そこで 「Foreach ADO 列挙子」を選択します。

「Foreach ADO 列挙子」を選択すると、「列挙子の構成」が表示されます。
そこが二ヶ所目の設定箇所です。
「ADO オブジェクト ソース変数」とある所にループさせたい変数を選択します。
今回は @[User::MemoList] を選択します。

三ヶ所目ですが、「列挙子モード」を選びます。
「最初のテーブル内の行」、「すべてのテーブルの行」、「すべてのテーブル」を選択できます。
今回は「すべてのテーブルの行」を選択します。
他の2つは使ったことがないのでわかりません(–)

「コレクション」での設定は以上です。

続いて「変数のマッピング」を選択します。
@[User::MemoList] のレコード内の値をどの変数に割り当てるかを設定します。
インデックスは0から始まります。
SELECT の順番に依存してるので、下のようにマッピングします。
変数@[User::MemoIDItem] インデックス0
変数@[User::memoTextItem] インデックス1
変数@[User::UpdateDateItem] インデックス2

変数名は、わかりやすいように 〜Item と付けました。

php で書くと下のような感じでしょうか。
mssql_query() はSQL実行タスクで行っている部分です。

$MemoList = mssql_query("SELECT MemoID, MemoText, UpdateDate FROM [dbo].[Memo] WITH (NOLOCK)");
while($rows = mssql_fetch_rows($MemoList))
{
    $MemoIDItem = $rows[0];
    $MemoTextItem = $rows[1];
    $MemoUpdateDateItem = $rows[2];

    // データフロータスクなどでゴニョゴニョする

}

mssql_fetch_rows() の引数部分が 「ADO オブジェクト ソース変数」で選択した変数です
mssql_fetch_rows() 関数は 「列挙モード」で違う関数に条件分岐されるような気がしてます
やはり使ったことがないのでわかりません(^^)

コメントを残す