- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SSIS 変数の値をSQL実行タスクSQLStatementで利用する方法)
SSIS変数を利用してSQL実行タスクで動的なテーブル名を指定する方法
このQ&Aのポイント
- SSISの変数を利用してSQL実行タスクのSQLStatementで動的なテーブル名を指定する方法について教えてください。
- 具体的には、データを取り込むために一時テーブルを作成し、そのテーブルを利用してデータを取り込んだ後に削除する処理を実装する際に、変数を使用してテーブル名を動的に指定したいです。
- 現在、SQL実行タスクエディタのSQLStatementで変数を呼び出す方法が分からず困っています。具体的な方法を教えていただけますか?
- みんなの回答 (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はタスク間でやり取りするからグローバルでなければ駄目なのかと 思い込んでいました。。。 ホントに理解できてなくてお恥ずかしいです。 やりたい事を効率的に出来るようになるには まだまだだと思いますが、 頑張りますっ 本当にありがとうございました!