我有一個 C# 應用程式,其中包含一個包含此WHERE子句的 SQL 查詢:
WHERE
A.Location = @Location
AND Widgets.Branch = @Branch
要求已更改,以便用戶可以要求查看所有分支。我知道我可以寫一個 if 陳述句來查看我是否有一個傳入的分支引數......然后有一個不同的選擇陳述句,完全省略分支的 AND 子句。
但我想知道是否有更簡單的方法來做到這一點?我可以傳入某種通配符嗎?
我試過 '*' 或 '%' 但這似乎不是正確的語法。我知道 % 與 LIKE 一起使用...
任何建議/提示將不勝感激。
編輯 1
所以我想弄清楚如何使用
WHERE
A.Location = @Location
AND (@Branch IS NULL OR Widgets.Branch = @Branch)
方法。
我的部分代碼如下所示:
using (var conn = new SqlConnection(connectionString))
{
activityByUserType = conn.Query<ActivityDetailsByUserTypes>(
@"
SELECT
ReportRefreshDate,
other columns...
FROM
(SELECT
columns
FROM table1 A
INNER JOIN Widgets ON LOWER(fieldAA) = LOWER(A.fieldAA)
WHERE
A.Location = @Location
AND Widgets.Branch = @Branch) DetailedResults
GROUP BY ReportRefreshDate;
",
new { Branch=branchId, Location = LocationId, RefreshDate = dateRange}).ToList();
}
return activityByUserType;
如您所見,我正在創建一個新的查詢物件……并在代碼塊的末尾將引數串列傳遞給它。
我更改了在 USING() 之前添加此 if 陳述句的邏輯
if (branchId.Equals("allbranches"))
{
branchId = null;
}
但這似乎并沒有真正起作用。
uj5u.com熱心網友回復:
您可以檢查WHERE子句中的引數是否為空:
WHERE
A.Location = @Location
AND
(@Branch IS NULL OR Widgets.Branch = @Branch)
當@Branch引數為空時,這不會過濾分支。
uj5u.com熱心網友回復:
您可以在查詢本身中明確檢查星號:
@Branch IN ('*', Widgets.Branch)
這樣,如果您通過@Branch=*,該列將被忽略,否則將與該列的值進行比較。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/393892.html
標籤:C# sql sql-server 通配符
上一篇:SqlServer表上的過濾INDEX在插入程序中導致錯誤
下一篇:LEN()有錯誤嗎?
