4

を使用して GridView を作成するときに、奇妙な出会いがありますSELECT..WHERE..<field> IN (value1, val2...)

「データソースの設定」タブで、値をハードコーディングするSELECT .... WHERE field1 in ('AAA', 'BBB', 'CCC')と、システムはうまく機能します。

ただし、新しいパラメーターを定義し、変数を使用して連結された値の文字列を渡すと、@session、Control、またはクエリ文字列です。たとえばSELECT .... WHERE field1 in @SESSION、結果は常に空です。

パラメータの内容を 1 つの値だけに減らして、別の実験を行いましたが、うまくいきました。

要するに、値の文字列をハードコーディングすると機能し、単一の値のみを持つ変数を渡すと機能しますが、2 つの値を持つ変数を渡すと機能します。失敗しました。

私が間違いを犯したか、それとも既知のバグであるかをお知らせください。

BR SDIGI

4

3 に答える 3

3

これは機能します。ただし、それがどれほど効率的かはわかりません。

CREATE PROCEDURE [dbo].[get_bars_in_foo]
    @bars varchar(255)
AS
BEGIN
    DECLARE @query AS varchar(MAX)
    SET @query = 'SELECT * FROM [foo] WHERE bar IN (' + @bars + ')'
    exec(@query)
END

-- exec [get_bars_in_foo] '1,2,3,4'
于 2012-10-01T03:44:20.610 に答える
1

この質問への回答を見てください(これはあなたのものと非常に似ています)

SQL IN 句をパラメータ化する

これは最終的に(複雑なルートを介して)この決定的な答えにリンクします。

http://www.sommarskog.se/arrays-in-sql.html

于 2008-12-05T01:35:12.153 に答える
0

ストアド プロシージャを使用する場合は、このメソッドを使用できます。これについては、SQL での実行方法について説明しました。

于 2008-12-05T01:52:02.290 に答える