可以說我在存儲過程中有一個參數@Name
。如果它不爲空/空,我想按此參數進行過濾只有。在任何其他情況下,我想忽略過濾器。有條件地對sql查詢應用過濾器
我想出了以下兩種解決方案。爲了舉例,讓我們只考慮參數爲空的情況。
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的不同表名稱,您可以根據需要更改它,並且它工作得非常好。 –