最近在項目中碰到一個比較有意思的問題,網上查找了一些方法,在這里總結分享一下。
我們經常會碰到這樣的場景:需要查詢數據,有一些查詢條件,但是查詢的時候,我們希望在某個條件為空的時候,則不篩選這個條件,處理的思路主要有這么幾種:
1、程序收集查詢查詢條件的時候處理,這種適合動態SQL的,拼接SQL的時候根據參數是否為空來決定是否拼接對應的查詢條件。
2、SQL中處理,這種情況適合存儲過程,參數固定的場景,或者是非拼接where條件的場景,存儲過程中一般沒有使用拼接SQL的方式,那么如何實現參數為null的時候自動查詢所有數據呢?本篇文章就是來討論這個問題。
例如有個表叫做book,記錄了一些書籍的信息,表比較簡單,接下來的截圖中可以看到,假如頁面上有個查詢條件,按照出版社來查找書籍,我們一般的使用方式是這樣的(參數的定義以及賦值模擬頁面上的數據收集):
1 DECLARE @publishers VARCHAR(50); 2 SET @publishers='清華大學出版社'; 3 SELECT * FROM dbo.Book WHERE Publishers=@publishers
結果如下:
當出版社篩選條件為null,該如何寫SQL呢?
1 DECLARE @publishers VARCHAR(50); 2 SELECT * FROM dbo.Book WHERE Publishers=ISNULL(@publishers,Publishers)
查詢結果:
由此可以實現上述需求,尤其是存儲過程的時候可能更適用。