私はパラメータ@Name
をストアドプロシージャに持っています。このパラメータでフィルタリングする場合は、が空でない場合はnullにします。それ以外の場合は、フィルターを無視したい。条件付きでSQLクエリにフィルタを適用します
私は次の2つの解決策を考え出しました。例として、パラメータが空の場合のみを考えてみましょう。
select *
from MyTable
where (len(rtrim(ltrim(@Name))) > 0 and Name = @Name) or (len(rtrim(ltrim(@Name))) = 0)
一
@query = 'select * from MyTable'
if (len(rtrim(ltrim(@Name))) > 0)
@query = @query + ' Name = @Name '
第予想通りのアプローチの両方が働いています。あなたは(コードの点で)最もクリーンで
- 他の(良い)の選択肢があります。
注:あなたがそう思うならば、この問題はまた、コードレビューに合わせて、そこ
'または@Nameはnull'なのでありますか? – jarlh
@jarlhサンプルをきれいに保つために、これを省略しました – Athafoud
@Athafoud:私の答えを見てください。それは、ストロークされたプロシージャが非常に長くなる場合に、クエリを拡張してよりよく維持する方法を示します。私はeaxpleのためにあなたが必要に応じて変更することができ、それは本当にうまく動作するために異なるテーブル名を使用します。 –