1

「LIKE」や「IN」などの機能が必要なクエリを使用しています。値はSSRSによって返され、SSRSによって提供される文字列をフォーマットする方法を制御できません..

私のシナリオは次のようなものです

SELECT *
FROM suppliers
WHERE supplier_name LIKE IN ('IBM', 'Hewlett Packard', 'DELL', 'Microsoft',)

「IBM」、「Microsoft」などを含むすべてのサプライヤー名が必要です。

例: 「IBM_ER」、「IBM-PCR」、「EBM_TCC」、「Microsoft-Delta」、「Microsoft-TCC」など。

SSRS からパラメーターとしてオプションのリストを受け取ります。ここで、@Manufacture は上記の文字列で構成されていますが、それを制御することはできません。

SELECT *
FROM suppliers
WHERE supplier_name LIKE IN (@Manufacturer) 

このことを達成するための回避策はありますか?

4

4 に答える 4

3

ニキル、あなたが最初に学ばなければならないことは、冷静でいることです。助けを求めてここにいる人々があなたの質問を理解していない場合は、詳細を投稿し忘れた可能性があります。

Jarrod の答えは正しかったのですが、@Manufactor を文字列リストとして使用している場合は、次のようにできます。文字列を分割し、その後 IN ステートメントとして使用します。

最初に、ない場合は分割関数を作成します。例を次に示します: https://codereview.stackexchange.com/questions/15125/sql-server-split-function-optimized

次に、ステートメントを次のように変更します。

SELECT *
FROM suppliers
WHERE supplier_name IN (SELECT [value] FROM dbo.fn_Split(@Manufactor,','))
于 2013-03-14T21:53:14.877 に答える
1

まず、CSV文字列をデータの行に変換できるように分割関数を作成します

次に、この関数の結果に参加し、分割の結果をワイルドカードで埋めます。

SELECT *
FROM suppliers sup
JOIN dbo.Split(',', @Manufacturer) split
    ON sup.supplier_name LIKE '%' + split.s + '%'
于 2013-03-14T22:01:30.373 に答える
1

これを試して

SELECT *
FROM suppliers
WHERE supplier_name like '%IBM%'
or supplier_name like '%Microsoft%'
or supplier_name like '%Hewlett Packard%'
于 2013-03-14T21:38:08.457 に答える
0

あなたが探しているのはUNION

SELECT *
FROM suppliers
WHERE supplier_name LIKE '%IBM%'
UNION
SELECT *
FROM suppliers
WHERE supplier_name LIKE '%Hewlett Packard%'
UNION
SELECT *
FROM suppliers
WHERE supplier_name LIKE '%Microsoft%'

質問に詳細を追加したので、ストアド プロシージャを呼び出して、名前のリストをサーバー上の動的 SQL ステートメントに解析することもできますが、それを下に行くと、SQL インジェクション ベクトルは言うまでもなく、非常に見苦しくなります。道。

于 2013-03-14T21:33:56.523 に答える