Pages

T-SQL 動態修改排序欄位

Jun 28, 2011
這篇主要設法要在T-SQL語法中,如何依使用者條件動態修改排序欄位,筆者提供 3 種解決方式。
筆者遇到一個實例,系統需求是在資料查詢時提供選擇排序欄位,如下圖:
1
由於資料邏輯設計採用預存程序,須盡可能在資料庫這端處理資料排序的方式。
  • 第 1 種作法:在預存程序中組合查詢字串

使用 exec sp_executesql 的方式,範例:
DECLARE @SQLString nvarchar(2000);
SET @SQLString = ‘主要查詢內容…’
IF @ORDER_KIND=’1’
  SET  @SQLString  =  @SQLString  + ‘ ORDER BY … ‘
IF @ORDER_KIND=’2’
  SET  @SQLString  =  @SQLString  + ‘ ORDER BY … ‘

exec sp_executesql @SQLString ;
不過組合字串的方式原本就不是一個好主意,增加日後維護的困難度。
  • 第 2 種作法:ORDER BY 搭配CASE WHEN

無意間發現 ORDER BY 還可以CASE WHEN的條件式, 參考: http://www.51bcw.com/article-html-503.htm
2
此種作法有個小秘技,當CASE WHEN 無法串列多個欄位時,
筆者將各型別均轉型為CHAR後(不是VARCHAR),串接各欄位值為一個長字串做排序比較用如下圖:
3