2011-04-10 67 views
2

是否有包含有辦法,列名這兩個參數都一樣SQL包含參數

CONTAINS(cars.brand,COALESCE(@brand,cars.brand)) 

現在,如果@brand = NULL第二個參數是cars.brand使得查詢作爲

CONTAINS(cars.brand,cars.brand) 

這將幫助我在這裏忽略我會在一個表中尋找一個特定品牌的情況下

WHERE 1=1 

,無論品牌是什麼,都會返回結果。

但是,由於第二個參數必須是字符串,因此會出現語法錯誤。

回答

2

一個做到這一點的方法之一是

((@brand IS NULL) OR CONTAINS(cars.brand, @brand)) 

傳遞NULL爲您不想通過過濾參數。

[注意:如果您有很多參數,您應該注意parameter sniffing以及不正確的緩存查詢計劃的可能性。雖然這可能會有不同的行爲自由文本搜索]

+0

感謝WOW!它的工作!所以沒有辦法通過COALESCE工作?以及如何解決參數嗅探或查詢計劃?COALESCE可能是因爲我確實有很多可能爲null的參數。 – pcraft 2011-04-10 12:55:53

+1

參數嗅探仍然可能是COALESCE的一個問題 – 2011-04-10 12:57:16