SQL実行タスクで結果セットを返す

Pocket

以前、備忘録としてForeachループコンテナを使ったループ処理を書きました
ですが、Foreach ループコンテナで使う変数を SQL実行タスクで作る場合もある
そのため、SQL実行タスクの備忘録も書いておく

今回はSQL実行タスクで配列のようなObject変数を取得する部分です
Memoテーブルに下記のようなデータが入っているとします

[TABLE=4]

メモにidを割り当て、更新日時を保存してます。
このMemoテーブルのSELECT結果を変数に割り当てます。

制御フローのSQL実行タスクを編集します。

編集を開始するとSQL実行タスクエディタが開きます

開いたウィンドウの左側にはいつものように、「全般」、「パラメータマッピング」、「結果セット」、「式」があります
今回は単純なSELECT結果を変数に入れるので、「全般」と「結果セット」を設定します

最初に「全般」を選択します
「全般」で設定するのはSQL ステートメントと結果セットです。

一ヶ所目は「SQL ステートメント」です
ここの「ConnectionType」と「Connection」は、適宜設定してください(^^)
「SQLSourceType」 ですが、今回は「直接入力」にします
「SQLStatement」は下記のようなSQLとします

SELECT MemoID, MemoText, UpdateDate FROM [dbo].[Memo] WITH (NOLOCK)

次に「結果セット」の「ResultSet」を設定します。
デフォルトの「なし」から「完全な結果セット」にします
これで結果セットが返るようになります

以上で「全般」での設定は終わりです
でも、このままでは「完全な結果セット」をどうやって使えばいいのかわかりませんね
次の「結果セット」の設定で、変数への割り当て先を決めます

「結果名」を 0 、「変数名」を割り当てたい変数にします
今回は@[User::MemoList]に割り当てます
この変数の型はObjectにします。変数名は何でもいいです
レコードの配列のようになってるので〜List みたいな変数名が良いと思います

これで結果セットを変数に入れられるようになりました

以上で「結果セット」の設定は終わりです
SQL実行タスクで取得した結果は Foreach ループコンテナの Foreach ADO 列挙子で使えます

今回のSSISで実現したことを php で書くと下記のような感じでしょうか?

switch ( $ResultSet)
{
case "なし":
    break;
case "単一行":
    break;
case "完全な結果セット":
    $MemoList = mssql_query("SELECT MemoID, MemoText, UpdateDate FROM [dbo].[Memo] WITH (NOLOCK)");
    {
        // ここで Foreach ループコンテナなどでごにょごにょする
    }
    mssql_free_result($MemoList);
    break;
case "XML":
    break;
}

SSIS での @[User::MemoList] と php での $MemoList は同義です。
$ResultSet は全般の結果セットで設定した ResultSet です。

コメントを残す