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

資料庫查詢結果動態排序(六):Richard Romley 多 CASE 拆分法、避免資料類型衝突與索引優化考量

     編輯:關於SqlServer

Richard Romley 巧妙解法

將 ORDER BY 拆分為三個獨立 CASE 運算式,各自處理一個欄位,完美避開「CASE 僅能回傳單一資料類型」的限制:

Listing 6:Richard 多 CASE 拆分法
ALTER PROC GetSortedShippers
    @ColName AS SYSNAME
AS
SELECT *
FROM Shippers
ORDER BY
    CASE @ColName WHEN 'ShipperID' THEN ShipperID ELSE NULL END,
    CASE @ColName WHEN 'CompanyName' THEN CompanyName ELSE NULL END,
    CASE @ColName WHEN 'Phone' THEN Phone ELSE NULL END

優勢分析

  • SQL Server 能為每個 CASE 推導正確資料類型,無需額外轉換
  • 程式碼簡潔,易維護擴充
  • 效能優於動態 SQL,可重用執行計畫

重要限制:索引優化條件

注意: 僅當指定欄位不需計算時,索引才能優化排序操作。若 CASE 包含運算式(如字串化數值),索引將失效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved