多條件查詢使用TSQL WHEN 判斷(就不要在一個一個串字串了)

很久以前 Dotjum 遇到多條件查詢的時候,也是在前端串一大堆串 SqlCommand ,
在送到到後端 SQL 作查詢,後來看到一個範例的查詢,就開始使用這種方法,
話不多說,我們直接來看圖文說明。

很久以前 Dotjum 遇到多條件查詢的時候,也是在前端串一大堆串 SqlCommand ,
在送到到後端 SQL 作查詢,後來看到一個範例的查詢,就開始使用這種方法,
話不多說,我們直接來看圖文說明。
使用的語法很簡單,Dotjum這邊使用兩個變數(你看完這個範例,我想你就算有16個變數也是可以使用)
在語法方面,主要的就是
這邊以北風資料庫為例,主要使用到TSQL的WHEN判斷
主要在用CASE判斷當傳入的值是 空值或預設值 ,就會變成那個欄位的值

第一個情境,前端TextBox 傳入 空值  跟 下拉選項 傳入我們預設的ALL

查詢出來就是全部的資料表 91 筆資料
image
第二個情境 當TextBox 有輸入值的時候 UK 查出來是 7 筆
DECLARE @Country varchar(10)
DECLARE @City varchar(10)
SET @Country = 'UK'
SET @City = 'ALL'

SELECT * FROM dbo.Customers
--判斷如果是空值傳入則直接變成本身欄位比對 若不是空 則用傳進來的變數比對
--一般空值你可以應用在 TextBox上
WHERE Country = CASE @Country WHEN '' THEN Country ELSE @Country END
--那如果你還有一個DropDownList 你可以把預設選項做一個設定值
--例如說DropDownList預設值是 ALL 
--判斷如果是ALL傳入則直接變成本身欄位比對 若不是ALL 則用傳進來的變數比對
AND City = CASE @City WHEN 'ALL' THEN City ELSE @City END
image 
第三個情境 當TextBox 有輸入值的時候 UK ,下拉選項 Cowes 查出來是 1 筆
DECLARE @Country varchar(10)
DECLARE @City varchar(10)
SET @Country = 'UK'
SET @City = 'Cowes'

SELECT * FROM dbo.Customers
--判斷如果是空值傳入則直接變成本身欄位比對 若不是空 則用傳進來的變數比對
--一般空值你可以應用在 TextBox上
WHERE Country LIKE CASE @Country  WHEN '' THEN Country ELSE @Country  END
--那如果你還有一個DropDownList 你可以把預設選項做一個設定值
--例如說DropDownList預設值是 ALL 
--判斷如果是ALL傳入則直接變成本身欄位比對 若不是ALL 則用傳進來的變數比對
AND City = CASE @City WHEN 'ALL' THEN City ELSE @City END
image 
所以不管條件有多少個,先寫好對應的查詢變數,就不需要在串查詢字串的方式,這樣丟來丟去,
當然如果有TextBox的值是不確定,也可以把比對條件改成 Like '%' 來作查詢,
就這樣簡簡單單就可以完成多條件的查詢。
補充一下,我在看一個 SubText 的 OpenSource ,好像還有更好的用法,等之後整理整理再分享給大家。