1

多くの行を含む列があります。メソッドに値のリストを渡します。この列のサブストリングに探している値が含まれているすべての行を返したいと思います。

現在、私はCHARINDEX単一の部分文字列をチェックするために使用してOR CHARINDEXおり、後続のすべての部分文字列に追加しています。あなたが感謝できると確信しているので、それはかなり厄介です。

だから、現時点では、私は持っています:

[Long SQL query]...
queryString.Append(string.Format(" (AND CHARINDEX( '{0}', Table.Column ) > 0 ", ListOfValues[0]));
            foreach (string value in ListOfValues)
            {
                queryString.Append(string.Format("OR CHARINDEX( '{0}', Table.Column ) > 0 ", value));
            }

            queryString.Append(string.Format(")AND CHARINDEX( '{0}', Table.Column) > 0)"));

queryString.Append(")");

これを行うための構文的に恐ろしい方法はありませんか?:)

ありがとう

4

2 に答える 2

2

私が質問を理解していれば、SQL側でこれをより簡単に行うことができます。

Select MyColumn
From MyTable
Where MyColumn Like '%MySubstringText%'

明らかに、サブ文字列が変更される場合は、SQLステートメントを動的に作成する必要があります。

編集:

可能な部分文字列が複数ある場合は、テーブルに値のリストを入力してから、2つのテーブルを相互結合し、CharIndexを使用してフィルタリングできます。

Create table MySubstrings
(
    MySubstring nvarchar(100) not null
)


Select t.MyColumn
From MyTable t, MySubstrings s
Where CharIndex(s.MySubstring, t.MyColumn) > 0

ただし、パフォーマンスは良くないかもしれません。

于 2012-07-30T09:50:30.090 に答える
0

まず、そのようなSQLクエリに文字列を入れるのは非常に危険です。注意しない場合は、SQLインジェクションhttp://en.wikipedia.org/wiki/SQL_injection用にアプリケーションを開いていることになります。

そして今、答えに:

queryString.Append(string.Format(" Table.Column LIKE '%{0}%' ", ListOfValues[0]));

SQLインジェクションを回避するには、代わりにこれを実行してみてください。

command.Parameters.AddWithValue("@ParamX","%" + value + "%");

ここでは文字列の比較を行っているので、SQLサーバーで文字列を処理するための面倒な方法は考えられません。

于 2012-07-30T09:52:39.247 に答える