2

WHERE table.value LIKE @pattern文字列パラメーターを取得し、これをクエリの句の一部として使用するストアド プロシージャを使用しています。これが引き起こす危険性についてだれかが口を挟む前に、一連の既知の値の 1 つをパターン パラメータとして使用してプロシージャが呼び出されます。ユーザー入力からこのパラメータへの直接的なパスはありません。

個々のケースでは、これは機能します。私の可能なパターンは次のとおりです。

"RBI-%-TH%N-[AB]-%"
"RBI-%-TH%N-C-%"
"RBI-%-TH%N-D-%"
"RBI-%-VISUAL%"

私が問題に直面しているのは、デフォルトのパターンを設定することで、これらの 4 つすべてをカバーしようとすることです (これtable.valueにより、これらのパターンのいずれかに一致するすべてのレコードが選択されますが、それ以外は何も選択されません)。最初の 3 つは十分に簡単"RBI-%-TH%N-[ABCD]-%"ですが、最終的な可能な値を説明する適切な方法を見つけることができませんでした。良い方法はありますか、またはこの条件を処理するロジックでストアド プロシージャを複雑にする必要がありますか?

4

3 に答える 3

0

私は次の場所で同様の質問をしました。

TSQL - like によるパターン マッチング

そして、いくつかの良い答えがありました。最も役立つのは、考えられるパターンを新しいテーブルに入れてから、MaxiWheat の提案に従ってテーブルを結合することだと思います。

于 2013-04-02T01:49:46.267 に答える
0

UNION ALL を使用した別のバリエーションを次に示します。カーディナリティによっては、より限定された範囲のスキャンになる可能性がありますが、クエリの作成方法に関係なく、長時間実行されるスキャンが発生する可能性があります。いくつかのバリエーションをテストし、実行計画を確認して、これらをデータに対して実行したときに実際にパフォーマンスがどのように積み重なるかを確認する必要があります。フリー テキスト検索の設定と使用はオプションですか?

SELECT ...
FROM ...
WHERE [value] like "RBI-%-TH%N-[A]-%" 
UNION ALL
SELECT ...
FROM ...
WHERE [value] like "RBI-%-TH%N-[B]-%" 
UNION ALL
SELECT ...
FROM ...
WHERE [value] like "RBI-%-TH%N-[C]-%" 
UNION ALL
SELECT ...
FROM ...
WHERE [value] like "RBI-%-TH%N-[D]-%" 
UNION ALL
SELECT ...
FROM ...
WHERE [value] like "RBI-%-VISUAL%";
于 2013-03-18T19:50:36.183 に答える
0

select ... from ...
where [value] like "RBI-%-TH%N-[ABCD]-%" or [value] like "RBI-%-VISUAL%"

十分ではありません?

于 2013-03-18T18:44:54.350 に答える