3

アプリケーションに、特定の列の文字列値を検索する検索機能があります。検索テキストは、パラメーターとしてプロシージャーに渡されます。ここで、別のテーブルの整数である別の列を検索する必要があります。入力パラメーターは 1 つですが、両方の列を検索し、それに応じて結果を返す必要があります。

//クエリ:

@SearchText VARCHAR(8000) = ''

SELECT DISTINCT Id, TransactionId, wfdFieldValue 
where (wfdFieldValue LIKE '%' + @SearchText + '%' OR @SearchText = '')

上記のクエリでは、where 条件に TransactionId を含める必要があります。そのため、ユーザーが TransactionId または Fieldvalue を使用して検索した場合、クエリは結果を返します。

注: TransactionId は Integer DataType です。

4

2 に答える 2

3

私の理解が正しければ、検索結果にその行が表示されるようにするには、どちらかの列にヒットする必要があります。その場合、単純なOR;が必要になります。

SELECT DISTINCT Id, TransactionId, wfdFieldValue 
FROM bop
WHERE @SearchText='' OR 
       wfdFieldValue LIKE '%' + @SearchText + '%' OR 
       TransactionId LIKE '%' + @SearchText + '%'

LIKE(手動で変換せずに、整数列ですぐに使用できます。)

ただし、先頭を使用したこの種のワイルドカード検索で%は、最適な方法でインデックスが使用されないことに注意してください。このクエリのパフォーマンスは、テーブルが大きくなるにつれて大きくなることはほとんどありません。

于 2013-06-07T07:07:35.220 に答える