很久以前 Dotjum 遇到多條件查詢的時候,也是在前端串一大堆串 SqlCommand ,
在送到到後端 SQL 作查詢,後來看到一個範例的查詢,就開始使用這種方法,
話不多說,我們直接來看圖文說明。
很久以前 Dotjum 遇到多條件查詢的時候,也是在前端串一大堆串 SqlCommand ,
在送到到後端 SQL 作查詢,後來看到一個範例的查詢,就開始使用這種方法,
話不多說,我們直接來看圖文說明。
使用的語法很簡單,Dotjum這邊使用兩個變數(你看完這個範例,我想你就算有16個變數也是可以使用)
在語法方面,主要的就是
這邊以北風資料庫為例,主要使用到TSQL的WHEN判斷
主要在用CASE判斷當傳入的值是 空值或預設值 ,就會變成那個欄位的值
第一個情境,前端TextBox 傳入 空值 跟 下拉選項 傳入我們預設的ALL
查詢出來就是全部的資料表 91 筆資料
第二個情境 當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
第三個情境 當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
所以不管條件有多少個,先寫好對應的查詢變數,就不需要在串查詢字串的方式,這樣丟來丟去,
當然如果有TextBox的值是不確定,也可以把比對條件改成 Like '%' 來作查詢,
就這樣簡簡單單就可以完成多條件的查詢。
補充一下,我在看一個 SubText 的 OpenSource ,好像還有更好的用法,等之後整理整理再分享給大家。