1

重複の可能性:
SQL IN 句をパラメータ化しますか?
SQL:IN 句を使用して文字列を IDS にキャストする

WHERE IN句で宣言ローカル変数を使用したい

このようなもの:

テーブル XYZ

COL1 COL2
1    A
2    B
3    C
4    D
5    E

結果

1 A
2 B
5 E

クエリ

DECLARE @VAR VARCHAR(MAX)
SET @VAR = '1,2,5'
SELECT * FROM XYZ WHERE COL1 IN @VAR

どうすればいいですか?

注:サーバー機能はありません

プリミティブ値を (​​コードで) 作成し、それをクエリで使用することしかできません。クエリ自体ではなく、var のみを変更する方法を検索します。

私のコードは次のようになります:

list (dbparameter)
mylist.add ('@var','1,2,5')

commandsql.returnresult(myQueryInString,mylist)

したい

4

2 に答える 2

5
DECLARE @var TABLE
        (
        value INT
        )

INSERT
INTO    @var
VALUES
        (1), (3), (5)

/* You would need three separate inserts in 2005 */

SELECT  *
FROM    xyz
WHERE   col1 IN
        (
        SELECT  value
        FROM    @var
        )

を分割するテーブル値関数を記述することもできますCSVが、クライアント ライブラリがテーブル変数の受け渡しをサポートしている場合は、これが推奨されるオプションです。

関数の定義は、Erlang Sommarskog の記事で見つけることができます( を検索してくださいsimple_intlist_to_tbl)。それを宣言して、次のように呼び出します。

DECLARE @var VARCHAR(100) = '1,3,5'

SELECT  *
FROM    xyz
WHERE   col1 IN
        (
        SELECT  number
        FROM    simple_intlist_to_tbl(@var)
        )

クエリがそれよりも複雑な場合は、最初にこのリストを具体化する必要があります。

DECLARE @var VARCHAR(100) = '1,3,5'

DECLARE @tvar TABLE
        ( 
        number INT
        )

INSERT
INTO    @tvar
SELECT  number
FROM    simple_intlist_to_tbl(@var)

SELECT  *
FROM    xyz, ... /* Other complex joins */
WHERE   col1 IN
        (
        SELECT  number
        FROM    @tvar
        )
于 2012-04-18T18:50:56.783 に答える
0

リストをデータセットに分割する関数が必要です ( Jeff Moden のthisを使用すると動作し、非常に高速です)。その後、目的の列で IN 句を使用するだけです。

于 2012-04-18T19:31:29.033 に答える