検索ページのストアドプロシージャを記述する必要があります。検索ページでは、ユーザーは一部のフィルタで「任意」を選択でき、各フィルタはDB内の列にマップされます。SQLサーバーの条件付きフィルタリング
私のストアドプロシージャでこれをアプローチする最良の方法は何ですか:
(1)私は、選択したフィルタに基づいて、動的SQL(sp_executesqlを)一緒に行くと、クエリを作成する必要がありますか?これは、実行計画のキャッシングに悪影響を及ぼしますか?
(2)私は、「任意の」すべての可能な値に変換し、静的なクエリで同じを使用する必要がありますか?
は(3)私は、必須のフィルタを使用して一時テーブルに結果を格納し、これらの結果に(ANYオプションをサポート)、オプションのフィルタ1対1を適用する必要がありますか?
(4)私が考えていない他の方法はありますか?
SELECT * FROM TABLE
WHERE (FILTER_FOR_COL_A IS NULL OR COL_A = FILTER_FOR_COL_A)
AND (FILTER_FOR_COL_B IS NULL OR COL_B = FILTER_FOR_COL_B)
FILTER_FOR_COL_A
が列COL_A
のフィルタ値である:本当にユーザーがフィルタを選択する方法、私はこのような何かをするだろう知らず
ない完全な答え私はコメントとして投稿しますが、** ** '2'を行いませんので、 - あなたは、リストを指定した場合、それは(すなわちに必要がない場合、クエリエンジンはまだそのフィールドをチェックします'IN'リスト内のテーブルのすべての値のうち、それはまだすべての行をチェックします) – JNK
このトピックに関する必須の読書。 http://www.sommarskog.se/dyn-search.html –