dポイントプレゼントキャンペーン実施中!

初めまして!
SSISの変数利用について 教えて頂きたいので よろしくお願いいたします。

SSISの変数に入った値をSQL実行タスクの SQLStatementで利用することは
できませんでしょうか?

具体的に何をやりたいかと言いますと
データを取り込む為に一時テーブルを使います。
SQL実行タスクで一時テーブルを作成して、
データを取り込み、処理後に一時テーブルを削除します。

素人考えで、もしほぼ同時にパッケージが実行された場合に
一時テーブルの名前がカブっていると不具合の元にならないかと思いました。

そこで、変数の値でテーブル名を動的につけられればと思ったのですが、
変数に入れた値を、
色々調べてみたのですが SQL実行タスクエディタのSQLStatementでどう呼び出せばよいのか分かりません。

例えば、以下のような文で##test_table の部分を変数で指定することはできないのでしょうか?

CREATE TABLE ##test_table(
[CD] VARCHAR(10),
[NAME] VARCHAR(20)
)
GO

お手数ですが、ぜひ教えてください。
SSISを始めたばかりで 考え方自体がおかしいのかも知れません・・・。
その場合は本当に申し訳ありません
どうぞよろしくお願いいたします!

A 回答 (1件)

変数をSQL実行タスクで使う場合は、タスクのプロパティのExpressionから設定をします。


変数名がTABLENAMEとすると、SQLStatementSourceに以下のように登録します。
"CREATE TABLE [" + @[User::TABLENAME] + "] ([CD] VARCHAR(10),[NAME] VARCHAR(20))"
これでTABLENAMEに入った変数のテーブル名で作成できます。

##test_tableを使ったSSISパッケージを複数同時に実行した場合、不具合が起こる可能性があるというのは正しいと思います。
それはグローバルの一時テーブルを使っているからで、ローカルの一時テーブルにすれば問題ないはずです。
#を1つ落として、#test_tableにすればよいと思います。タスク設定画面では選べないので、SQL実行タスクのプロパティから直接変更します。

>SSISを始めたばかりで 考え方自体がおかしいのかも知れません・・・。
全然おかしくはないです。ただ、SSISパッケージを複数パラレルで実行させるようなデザインは避けられるなら避けた方がいいと思います。

この回答への補足

早速ご丁寧な回答、ほんとうに本当にありがとうございます!!

試してみましたところ、ばっちり変数の値で一時テーブルを作ることができました!

その後、ファイルを取り込むOLEDB変換先の変数での指定にはまりましたが、
カスタムプロパティの
ACCESSMODEをVariableからOpenRowsetとし、
OpenRowsetVariableに変数を指定して、取り込みに成功しました!!

勉強が足りなくて、検証に時間がかかってしまい、お礼が遅くなってしまってすみませんでした。
本当に助かりました。
お聞きしなかったら、いつまでもハマっていたと思います。

でも、教えていただいた通り、
ローカルの一時テーブルで作成するほうがずっとスマートな気がします。
こちらも試してみたら、思い通りに動きました!
実は SSISはタスク間でやり取りするからグローバルでなければ駄目なのかと
思い込んでいました。。。
ホントに理解できてなくてお恥ずかしいです。

やりたい事を効率的に出来るようになるには まだまだだと思いますが、
頑張りますっ

本当にありがとうございました!

補足日時:2009/01/30 17:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す