網路資料庫程式設計常需依參數動態排序查詢結果。本文彙整五種解決方案,依複雜度與彈性遞增:
| 方案 | 核心技術 | 彈性 | 維護性 | 效能 | 適用版本 |
|---|---|---|---|---|---|
| 1. IF...ELSE | 靜態多重 SELECT | 低 | 低(修改多處) | 佳(獨立計畫) | 所有版本 |
| 2. 欄位名稱參數 | CASE 運算式 | 中 | 中 | 中(需型別轉換) | 所有版本 |
| 3. 欄位編號參數 | CASE + 序數 | 中 | 中 | 中 | 所有版本 |
| 4. 動態執行 | EXEC() 動態 SQL | 高 | 高(單一查詢) | 需防注入、計畫重用差 | 所有版本 |
| 5. 使用者定義函數 | Inline/Table-valued UDF | 高 | 高 | 佳(內嵌展開) | SQL 2000+ |
CASE 決定 ORDER BY,注意資料類型優先權。EXEC(@sql),極度彈性但需防 SQL Injection、計畫快取污染。CROSS APPLY 或 SELECT * FROM udf(@col),優化器可內嵌展開。依專案需求、版本限制、團隊技能選擇適當方案。現代開發推薦方案五(UDF)或參數化動態 SQL 搭配 sp_executesql 平衡彈性與安全。