質問 |
||
| QNo.3311647 | 【Transact-sql】 where条件、inのパタメータを変数に持たせる方法 | |
|---|---|---|
| 質問者:yamachan_tomo |
inの中の値を変数に持たせ、実行したいのですが方法がわかりません。 以下に、問題となっているsqlを記載しました。 aテーブルのIDはsmallint型で、varchar型等への型変更不可とします。 cast(ID as varchar(100)) in (@ID) 等も試してみたのですが、 '1,2,3'をin内の1データとみなしてしまっているようで、正しい結果を 返してくれませんでした。 declare @ID varchar(100) set @ID = '1,2,3' SELECT * FROM a WHERE ID in (@ID) |
|
困り度:
|
||
| 質問投稿日時: 07/09/03 14:50 |
||
回答良回答10pt |
|
| ANo.3 | 他の方が回答されている動的SQLか、受け取った変数をテンポラリテーブルに挿入してから、IN (SELECT a FROM temp_table) というのも可能だと思います。 |
|---|---|
| 回答者:h_0 | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/09/04 07:52 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答20pt |
|
| ANo.2 | 条件式の値部分(「列名=変数」や「列名 between 変数1 and 変数2」でなく、式全体を変えたいようなケース(inでの値の個数変更を含む)では、動的SQLを使う必要があります。 SQL Serverで動的SQLを使い、select文で複数行を得る場合の方法についてはあまり詳しくないので、ヒントという形でアドバイスします。 こんな感じで、文字列でカーソル定義(この時、SELECT文の条件式を変える)し、カーソルで操作する形になると思います。 execute('DECLARE tb CURSOR FOR SELECT * FROM tablename' + @yymm) |
|---|---|
| 回答者:chukenkenkou | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/09/03 17:23 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| ANo.1 | inの値を変数にする場合は、 where 列名 in(変数1,変数2,変数3) のように記述し、検索条件の列と各変数は、データ型の変換ができる必要があります。 |
|---|---|
| 回答者:chukenkenkou | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/09/03 15:52 |
|
| |
| この回答への補足 | 回答有難う御座います。 そうですね。それで実装できそうです....が、 欲を言うなら、inのパラメータを固定にしたくありません。 簡単に書きましたが、 set @ID = '1,2,3'の1,2,3は、はストアドのパラメータとなっていて、 アプリから渡してもらう値で可変です。 そのため@IDに入れる値は、1,2の時もあれば、1,2,3,4,5の時もあります。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |