SQL SERVER中查詢參數為空(null)時默認查詢所有的實現


    最近在項目中碰到一個比較有意思的問題,網上查找了一些方法,在這里總結分享一下。

我們經常會碰到這樣的場景:需要查詢數據,有一些查詢條件,但是查詢的時候,我們希望在某個條件為空的時候,則不篩選這個條件,處理的思路主要有這么幾種:

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)

查詢結果:

由此可以實現上述需求,尤其是存儲過程的時候可能更適用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM