- ベストアンサー
like演算子内で変数を使用することはできる?
- ExcelからSQL Serverの外部取り込みを行う際に、like演算子内で変数を使用することはできるのか疑問が生じました。具体的には、VBAの条件文で「WHERE(JOBTBL.BATCHID Like '12%')」と記述し、これを実行することで12から始まるデータを正常に取得できることが確認できました。しかし、この箇所に当日日付を取得するための変数を使用する場合、「WHERE(JOBTBL.BATCHID Like 'T_DAY%')」と記述してもエラーが発生せず、結果も表示されません。変数を使用することはできないのでしょうか?もし変数を使用できない場合、当日日付4桁から始まる列を含むテーブルを取得する方法を教えてください。
- ExcelからSQL Serverの外部取り込みを行う際、like演算子内で変数を使用することができるのか疑問に思っています。具体的には、VBAの条件文で「WHERE(JOBTBL.BATCHID Like '12%')」と記述し、これを実行することで12から始まるデータを正常に取得できました。しかし、この箇所に当日日付を取得するための変数を使用すると、エラーが発生せず結果も表示されません。変数を使用することはできないのでしょうか?もしできない場合、当日日付4桁から始まる列を含むテーブルを取得する方法を教えてください。
- like演算子内で変数を使用することができるのか疑問です。ExcelからSQL Serverの外部取り込みを行う際、VBAの条件文で「WHERE(JOBTBL.BATCHID Like '12%')」と記述し、これを実行することで12から始まるデータを正常に取得できました。しかし、この箇所に当日日付を取得するための変数を使用すると、エラーが発生せず結果も表示されません。変数を使用することはできないのでしょうか?もしできない場合、当日日付4桁から始まる列を含むテーブルを取得する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
"WHERE(JOBTBL.BATCHID Like '12%')" も変数に入っているものですよね? strSQL = "(略)..WHERE(JOBTBL.BATCHID Like '12%')" これなら SQL Server 側で認識されるSQLは (書くまでもないと思いますが) (略)..WHERE(JOBTBL.BATCHID Like '12%') になります。 では、質問者様の書かれたSQLではどうでしょうか? T_DAY=format(Now,"mmdd") strSQL = "(略)..WHERE(JOBTBL.BATCHID Like 'T_DAY%')" SQL Server側で認識されるSQLは (略)..WHERE(JOBTBL.BATCHID Like 'T_DAY%') です。 つまり、『BATCHID が文字列「T_DAY」で始まるもの』となってしまいます。 VBA側の変数T_DAYの内容で渡したいわけですから、以下のようにします。 strSQL = "(略)..WHERE(JOBTBL.BATCHID Like '" & T_DAY & "%')" これなら、T_DAY が 1202 だとしたら、SQL Server 側で認識されるSQLは (略)..WHERE(JOBTBL.BATCHID Like '1202%') となります。 この回答では簡便な方法で書きましたが、上記の方法は、本来は、プレースホルダによるパラメータバインドを使うべきです。 手入力の値ではないと言う事で、大丈夫だとは思いますが、SQLインジェクションを起こし易いセキュリティレスな方法なので好ましくないです。 一応、MSDNの例が載っているところをリンクしておきます。 SqlCommand.Prepare メソッド http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.prepare%28VS.71%29.aspx
お礼
うまくいきました!! ありがとうございます。