前言

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



我們進行測試,效果還不錯



註:本文章為第九屆鐵人賽系列文章之一