こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SSISのデータフロー内のSQLコマンドテキストで外部のパラメータを使う方法が分かりません

以下のようにDTExecを使って、
パラメータをSSISパッケージに引渡しをしています。

DTExec.exe /f D:\SSIS\test.dtsx
/Set "\Package.Variables[User::Date].Properties[Value]";"20090101"

制御フローのSQL実行タスクではExpressionsを使い、
以下のように記述すれば良いのですが、

"
SELECT
  Clm1, Clm2
FROM
  T_Data
WHERE
  Date = '" + @[User::Date] + "'"

データフロー内のSQLコマンドテキストでは
この表記が出来ないため、どのように記述すれば良いのか分からず
困っております、、
(それとも、そもそも出来ないのでしょうか??)

どなたかご教授願えないでしょうか?

以上、よろしくお願い致します。

投稿日時 - 2009-02-27 19:34:25

QNo.4754367

困ってます

質問者が選んだベストアンサー

こういう手順でやってみてください。
・SQLStateにダミーで値をセットしておく。
 (実行時に入っているであろうSELECT文をセット)
・上記の状態でデータフローをセットアップする
・セットアップできたら、OLE DBソースのプロパティで「Validate ExternalMetadata」をFalseに変更する
・SQLStateをクリアする

投稿日時 - 2009-03-05 02:34:33

お礼

jamshid6 さま

ありがとうございます!
無事、出来ました!
すごくすごく、助かりました!

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

投稿日時 - 2009-03-05 12:04:29

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>参考までに、以下のような事は出来ないのでしょうか??
>SELECT ? as Clm1, Clm2 FROM T_Data

カラム名を動的に指定したいという意味ですか?

パラメータは、SELECTのWHERE句、または、EXECのパラメータとしてしか評価されないので、その場所に指定することはできません。
(これは変数の値そのものをSELECTの結果に返したい場合でも同じことで、?は評価されません)
その場合は「SQLコマンド」ではなく、「変数からのSQLコマンド」を使います。
直前にスクリプトタスクでも置いて、変数の中に組み上げたSELECT文をセットしてそれを実行させればよいです。

投稿日時 - 2009-03-03 20:13:31

補足

jamshid6さま

こちらもご回答ありがとうございます。

>カラム名を動的に指定したいという意味ですか?
はい、おっしゃるとおりです!

そして、そもそもの質問からズレてしまっており、
大変恐縮なのですが、あとこの部分だけご教授頂けないでしょうか・・・?

-------------------------------------------
以下のスクリプトで、
変数からのSQLコマンドにUser:SqlState をセットしたところ、
"CommandオブジェクトのCommandテキストが設定されていません"
とエラーになってしまいます。。

<スクリプトメイン>

Public Sub Main()
Dim sqlState As String

'SQL文を設定
sqlState = "SELECT Clm1," & "'" & Dts.Variables("ReadDate").Value.ToString & "' as Clm2 FROM T_Data"
Dts.Variables("SqlState").Value = sqlState
Dts.TaskResult = Dts.Results.Success
End Sub

変数:ReadDate
スコープ:全体
データ型:String
値:空っぽ
⇒"yyyymmdd"の値を入れる(このスクリプトタスクに辿り着く時点で入っている)

変数名:SqlState
スコープ:全体
データ型:String
値:空っぽ
⇒SQL文を入れる

このほか、
Imports System.Data.SqlClient を使い、
CommandText に値を入れてみたりしたのですが、
やはりダメでした。。

※ちなみに、このスクリプトタスクまではエラーにならず動作します。
-------------------------------------------

以上、よろしくお願い致します・・・!

投稿日時 - 2009-03-04 14:25:05

ANo.1

>データフロー内のSQLコマンドテキストではこの表記が出来ないため、どのように記述すれば良いのか分からず困っております

これはたとえばOLEデータソースのSQLコマンドテキストのことですか?
SELECT Clm1, Clm2 FROM T_Data WHERE Date = ?
こんな風に書けば、横のパラメータボタンを押したときに変数が指定できるようになってませんか?

投稿日時 - 2009-02-28 01:57:45

補足

jamshid6さま

ご回答ありがとうございます。
なるほど、そのような記述があるのですね、、
試して、またご報告させて頂きます。

投稿日時 - 2009-02-28 06:03:29

お礼

jamshid6さま

無事、出来ました!!
ありがとうございます。

参考までに、以下のような事は出来ないのでしょうか??

SELECT
  ? as Clm1,
  Clm2
FROM
  T_Data

投稿日時 - 2009-03-03 17:27:52

あなたにオススメの質問