首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 逆向思維寫法:單一語句處理條件可選查詢

     編輯:關於SqlServer

面對「參數為空則查全部,非空則依條件過濾」的需求,習慣寫法是 IF 判斷拼接兩條 SQL。逆向思維利用邏輯運算子,單一語句即可涵蓋兩種情況。

傳統寫法

IF @classStr = ''
    SELECT * FROM Student;
ELSE
    SELECT * FROM Student WHERE Class = @classStr;

逆向思維單一語句

SELECT * FROM Student
WHERE '' = @classStr OR @classStr = Class;

邏輯解析

  • @classStr = '' 時:'' = '' 為真,WHERE TRUE OR ... 整體為真,回傳所有列。
  • @classStr = 'A' 時:'' = 'A' 為假,轉而評估 'A' = Class,等同 WHERE Class = 'A'。

擴充:多條件組合

SELECT * FROM Student
WHERE ('' = @classStr OR @classStr = Class)
  AND ('' = @nameStr OR @nameStr = UserName)
  AND (0 = @age OR @age = Age);

效能考量

  • 此寫法可能導致查詢最佳化程式無法使用參數嗅探產生最佳計畫,產生全表掃描。
  • SQL Server 可搭配 OPTION (RECOMPILE) 強制依實際參數值編譯。
  • 動態 SQL (sp_executesql) 仍是效能最穩健的方案,但維護成本較高。

適用場景

  • 資料量中小、查詢頻率低、維護便利性優先的內部報表/管理功能。
  • 預存程序參數預設值為 NULL 或空字串的情況。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved