SQL Server:使用帶有 WHERE 子句的 CASE WHEN 表達式
P粉270842688
P粉270842688 2024-04-03 14:46:55
0
1
512

我有一個有 SQL Server 的新 Spring Boot 項目,我需要用 SQL Server 本機查詢取代舊項目中儲存庫方法上的 MySQL 本機查詢。這是一個複雜的查詢,其中條件為 case when 表達式。當我嘗試在 SQL Server Management Studio 中測試該查詢時,它顯示如下圖所示的錯誤。 在此輸入圖像描述

這是我在儲存庫方法上使用 MySQL 的舊本機查詢,我想將其替換為 SQL Server 在此輸入影像描述 請幫我找到解決方案。 預先感謝您! !

P粉270842688
P粉270842688

全部回覆(1)
P粉904191507

這就是您所擁有的內容以及您應該在問題中以文字形式發布的內容。作為文本,試圖幫助您的人可以搜尋和複製它。

case when @num = 1 then p.merchant_name = @query else 1=1 end

CASE 是 TSQL 中的運算式。它不像許多其他語言那樣是一種流控制結構。若要使用「可選」過濾器,您需要使用 CASE 建構一個布林運算式來正確處理「可選」屬性。通常,使用 CASE 可以更複雜地完成此操作,如下所示:

case when @num = 1 and p.merchant_name  @query then 0 else 1 end = 1

所以這裡使用CASE來傳回一個可以在比較中測試的值。使用 0 或 1 並沒有什麼魔力。使用任何類型的任何值。

  • 當 @num 為 1 且值不符時,會傳回 THEN 分支 (0)。
  • 當 @num 為 1 且值相符時,傳回 ELSE 分支 (1)。
  • 當 @num 不是 1 時,傳回 ELSE 分支 (1)。

因此,當 CASE 表達式傳回 0(實際上不是 1)時,該行將被忽略(從結果集中刪除)。

鑑於您的查詢實際上是在應用程式中建立的,您應該考慮動態建立查詢並根據需要添加參數。這可能會產生更有效的查詢,資料庫引擎可以更好地優化該查詢。或者,您可以查看此廚房水槽討論和 Erland 的關於動態搜尋條件的討論。 TBH 看起來有人使用 @num 作為拼湊以避免為八個特定過濾器值添加參數。如果我想同時過濾商家名稱和商店名稱,則無法使用此方法。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板