查詢介面提供多個可選條件(如姓名、性別、年齡),使用者可任意組合。傳統寫法需列舉所有組合(2^n 種),導致大量 `IF` 巢狀與重複 SQL 字串,難以維護且效能低落。
IF A != '' AND B != '' AND C != '' THEN
SQL = "SELECT * FROM employee WHERE Name=A AND Sex=B AND Age=C"
ELSE IF A != '' AND B != '' THEN
SQL = "SELECT * FROM employee WHERE Name=A AND Sex=B"
... (共 8 條 SQL)
定義單一字串變數 `Str_Result` 累積條件,依序檢查各條件並追加:
Str_Result = ""
IF A != "" THEN
Str_Result = "WHERE Name = '" + A + "'"
END IF
IF B != "" THEN
IF Str_Result == "" THEN
Str_Result = "WHERE Sex = '" + B + "'"
ELSE
Str_Result = Str_Result + " AND Sex = '" + B + "'"
END IF
END IF
IF C != "" THEN
IF Str_Result == "" THEN
Str_Result = "WHERE Age = " + C
ELSE
Str_Result = Str_Result + " AND Age = " + C
END IF
END IF
Final_SQL = "SELECT * FROM employee " + Str_Result
實際開發中請改用參數化查詢,將條件值放入參數集合,SQL 字串僅保留佔位符(`@Name`, `@Sex`, `@Age`),由資料庫引擎處理型別與逸出,兼顧安全與效能。
// 概念示意 (C#)
var sql = "SELECT * FROM employee";
var conditions = new List<string>();
var parameters = new List<SqlParameter>();
if (!string.IsNullOrEmpty(name)) {
conditions.Add("Name = @Name");
parameters.Add(new SqlParameter("@Name", name));
}
// ... 同理處理 sex, age
if (conditions.Count > 0)
sql += " WHERE " + string.Join(" AND ", conditions);
// 執行命令並加入 parameters
字串累積法是處理動態多條件查詢的經典模式,配合參數化查詢可兼顧程式碼簡潔、執行效能與資安防護,建議作為標準開發慣例。