アプリ版:「スタンプのみでお礼する」機能のリリースについて

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 WHEREID in (@ID)

A 回答 (3件)

条件式の値部分(「列名=変数」や「列名 between 変数1 and 変数2」でなく、式全体を変えたいようなケース(inでの値の個数変更を含む)では、動的SQLを使う必要があります。


SQL Serverで動的SQLを使い、select文で複数行を得る場合の方法についてはあまり詳しくないので、ヒントという形でアドバイスします。

こんな感じで、文字列でカーソル定義(この時、SELECT文の条件式を変える)し、カーソルで操作する形になると思います。

execute('DECLARE tb CURSOR FOR SELECT * FROM tablename' + @yymm)
    • good
    • 0

他の方が回答されている動的SQLか、受け取った変数をテンポラリテーブルに挿入してから、IN (SELECT a FROM temp_table) というのも可能だと思います。

    • good
    • 1

inの値を変数にする場合は、



where 列名 in(変数1,変数2,変数3)

のように記述し、検索条件の列と各変数は、データ型の変換ができる必要があります。

この回答への補足

回答有難う御座います。
そうですね。それで実装できそうです....が、
欲を言うなら、inのパラメータを固定にしたくありません。
簡単に書きましたが、

set @ID = '1,2,3'の1,2,3は、はストアドのパラメータとなっていて、
アプリから渡してもらう値で可変です。
そのため@IDに入れる値は、1,2の時もあれば、1,2,3,4,5の時もあります。

補足日時:2007/09/03 16:13
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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


このQ&Aを見た人がよく見るQ&A