原文網址:https://dog0416.blogspot.com/2017/12/sql-server-where-null-null.html
[WHERE] 條件為 NULL 時回傳所有資料,非 NULL 時回傳符合條件資料這篇的題目很難想,只好直接將問題描述做成題目。這一篇也是撰寫某個功能遭遇到的問題,運氣很好的有程式碼可以參考。個人認為這個方法很特別,且未來很有機會再度用到,故特別撰寫此篇記錄。
目前遇到的系統分成 前端 (AngularJS) ↔ 後端 (ASP.NET MVC API) ↔ 資料庫( MS SQL Server/Stored procedure)。多數資料取得是透過 Entity Framework,少數透過呼叫 Stored procedure。
遭遇問題的情境是前端搜尋條件為空白的時候,需要取得所有資料。而後端接到的前端查詢條件時,內容值為 NULL,理所當然,呼叫 Stored procedure 時給予的參數為 NULL。那我們該怎麼辦?範例如下:
TableA
Id | Name | Status | Note |
---|---|---|---|
1 | Maze | 1 | Leader |
2 | Luke | 1 | Member |
3 | Duran | 2 | Member |
4 | Casey | 1 | Member |
我們有一個 SP,傳入參數為 note
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_GetTeamMember]
@note nvarchar(128)
AS
BEGIN
SET NOCOUNT ON;
...
...
END;
SP 內容可以這樣撰寫
SELECT *
FROM TableA
WHERE (@note IS NULL OR Note = @note)
整個SP會像這樣
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_GetTeamMember]
@note nvarchar(128)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM TableA
WHERE (@note IS NULL OR Note = @note)
END
GO
我們進行測試,效果還不錯