2

Sybaseで次のパターンを実行する方法が必要です。

SELECT * FROM tbl WHERE x IN(@list)

selectは、Webフォームから値が渡されるストアドプロシージャの一部になります。ユーザーが各フィールドに0から多数の検索キーを入力できるようにしたいのですが、複数の値が区切り文字で区切られて入力されます。現在、0から1のキーを処理できますが、>1は処理できません。

上記の疑似SQLに似た、これに対する洗練されたソリューションを見つけようとしています。他のDBには、これをサポートする方法が組み込まれているようですが(たとえば、配列)、単純なものはないようです。 Sybaseの答え。

どんな助けでもいただければ幸いです。詳細が役立つ場合はお知らせください。

4

5 に答える 5

1

SQLではこれを実際に行うことはできません。最良の代替策は、文字列の比較を行うことです。

select *
from tbl
where ','+@list+',' like '%,'+x+',%'

または、ステートメントを動的SQLとして作成する場合は、リストをSQLクエリ文字列に組み込むことができます。

于 2013-02-21T20:07:06.283 に答える
1

この方法を試してください:

declare @list varchar(100)

select @list = '1,2,3,4,5'

exec('SELECT * FROM tbl WHERE x IN ('+@list+')')
于 2013-02-22T07:55:38.890 に答える
0

phpとmysqlで非常によく似た質問に答えたところですが、ここでも同じように答えられると思うので、コピーして貼り付けます。

Visual Studioでのみ、同じ問題を処理しました。最初に、SQLステートメントに追加するパラメーターの文字列を作成しました。疑問符(?)を処理するだけでよいので、私がしたことの多くは必要以上のものです。

string[] inClause = new string[keywordTerms.Length];

for (int i = 0; i < keywordTerms.Length; i++)
    inClause[i] = ":keyword" + i.ToString("00");

次に、selectを作成するときに、次のように入力します。

sqlStatement += "WHERE kw.keyword IN (" + String.Join(", ", inClause) + ")"

最後に、このコードにパラメーターを追加しました。

for (int i = 0; i < keywordTerms.Length; i++)
    cmd.Parameters.Add(inClause[i], OracleDbType.Varchar2, 20, "keyword").Value = keywordTerms[i];

お役に立てば幸いです。

于 2013-02-21T20:11:38.623 に答える
0

手遅れかどうかはわかりませんが、同様のユースケースに遭遇したときに見つけたもので、本当に役に立ちました。

[1]: https://stackoverflow.com/questions/11101106/sybase-use-parameter-as-where-clause

乾杯

于 2016-08-26T07:16:01.093 に答える