最直觀作法:依參數執行不同預寫 SELECT:
CREATE PROC GetSortedShippers
@OrdSeq int
AS
IF @OrdSeq = 1
SELECT * FROM Shippers ORDER BY ShipperID
ELSE IF @OrdSeq = 2
SELECT * FROM Shippers ORDER BY CompanyName
ELSE IF @OrdSeq = 3
SELECT * FROM Shippers ORDER BY Phone;
| 優點 | 缺點 |
|---|---|
| 程式碼簡單易懂 | 查詢邏輯變更需修改多處 |
| 查詢優化器為每個 SELECT 產生獨立最佳計畫 | 參數嗅探問題較少(各計畫獨立) |
| 無動態 SQL 風險 | 擴充欄位需新增 IF 分支 |
IF...ELSE 方案以維護成本換取計畫穩定與簡單度,適合小規模固定排序需求。下文將介紹更靈活的參數化方案。