• 締切済み

SSISのSQL実行タスクで得た結果セットの使い方が分かりません

User変数をオブジェクト型で作成し、 その変数に対して、SQLの結果セット(完全な結果セット)を 投入するまでは出来たのですが、そのデータの活用方法が分かりません、、 具体的には、取得した結果セットをあるテーブルにInsertがしたいだけ なのですが、、 どなたか、ご教授願えないでしょうか? 以上、よろしくお願い致します。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

どこで躓いているかわからないですが、以下のあたりでしょうか? ・ForEach ループコンテナの「変数のマッピング」でフィールドの数だけ変数に受けます(インデックスは0から) ・SQL実行タスクでは、「INSERT INTO TABLEX VALUES (?,?,?,?)」という風に記載し、パラメータマッピングで上記の変数を指定します(パラメータ名は0,1,2...) ・変なデータ型のフィールドがあると、型をを合わせるのに苦労するかもしれませんが、結果セットに受け取る時にシンプルな型にCONVERTした方が早いです。

junzo_ex
質問者

補足

今更のご連絡になってしまい、 大変恐縮なのですが、無事、動作しました! が、1点だけ躓いています、、 varchar(30)の列からデータを取得しているのですが、 なぜか、データがところどころ途切れてデータが格納されてしまいます。。 たとえば、 「あああいいいううう」 といったデータが、 「あああいい」 で格納されてしまいます。 Foreachループコンテナ内にある SQL実行タスクのパラメータマッピングは、 方向:Input、データ型:Varchar、パラメータサイズ:-1 で設定しています。 パラメータをいじってみたものの、なかなかうまくいかず、、 お手数ですが、もう少しだけご教授願えないでしょうか? よろしくお願い致します・・・!

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

#1です。 >別で動作させている処理が失敗することがあるのです 詳細はわかりませんが、データフロータスクを使ったときに変換先にFASTLOADを選択するとデフォルトではテーブルロック(一括更新ロック)がかかるので、他の処理がタイムアウトするというような話であれば、行レベルロックに変更すれば回避可能かもしれませんね。

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms180876.aspx
junzo_ex
質問者

補足

ご回答ありがとうございます。 こちらも併せて確認してみます!

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

とりあえずやり方を書きます。 この完全な結果セットはADO.NETのデータセットとして入るので、 Foreachループコンテナを「Foreach ADO 列挙子」で設定し、1行ずつ全行をループで読み出します。コンテナの中にSQL実行タスクを置けば繰り返しINSERTされます。 そもそも結果セットに受け取った理由は何ですか? データベースにあるものを取ってきて、データベースにINSERTするならば、データフロータスクで十分では(Object変数に入れてもあまりうまみがないように思いました)。

junzo_ex
質問者

お礼

恥ずかしながら、 SQL実行タスクにどのように記述すれば良いか 分かりませんでした、、 申し訳ないのですが、 もう少しだけご教授頂いてもよろしいでしょうか?

junzo_ex
質問者

補足

ご回答ありがとうございます。 >そもそも結果セットに受け取った理由は何ですか? >データベースにあるものを取ってきて、データベースにINSERTするならば、 >データフロータスクで十分では 確かにおっしゃるとおりです、、 ただ、現在、非常に大きいデータを扱っておりまして、 それにより、別で動作させている処理が失敗することがあるのです。 そんな中、少しでも負荷を軽減させる可能性があるものを 模索しておりまして、この方法もあるのではないか?と考え、 試している次第なのです。。

関連するQ&A