1. 程式人生 > 其它 >SQL SEVER 中查詢引數為NULL時,預設查詢所有資料的解決方案,儲存過程適用

SQL SEVER 中查詢引數為NULL時,預設查詢所有資料的解決方案,儲存過程適用

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

 

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

1、程式收集查詢查詢條件的時候處理,這種適合動態SQL的,拼接SQL的時候根據引數是否為空來決定是否拼接對應的查詢條件。

2、SQL中處理,這種情況適合儲存過程,引數固定的場景,或者是非拼接where條件的場景,儲存過程中一般沒有使用拼接SQL的方式,那麼如何實現引數為null的時候自動查詢所有資料呢?本篇文章就是來討論這個問題。

例如有個表叫做book,記錄了一些書籍的資訊,表比較簡單,接下來的截圖中可以看到,假如頁面上有個查詢條件,按照出版社來查詢書籍,我們一般的使用方式是這樣的(引數的定義以及賦值模擬頁面上的資料收集):

 DECLARE @publishers VARCHAR(50);
SET @publishers='清華大學出版社';
SELECT * FROM dbo.Book WHERE Publishers=@publishers

結果如下:

當出版社篩選條件為null,該如何寫SQL呢?

 DECLARE @publishers VARCHAR(50);
SELECT * FROM dbo.Book WHERE Publishers=ISNULL(@publishers,Publishers)

查詢結果:

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

轉載自:https://www.lmlphp.com/user/57996/article/item/1787416/  ,如有疑問聯絡博主刪除。