T-SQL語法依使用者條件修改排序欄位

  • 4003
  • 0
  • 2011-06-28

T-SQL語法依使用者條件修改排序欄位

 

Dotlogs Tags:

筆者近日遇到一個實例,系統需求是在資料查詢時提供選擇排序欄位,如下圖:

alt

由於資料邏輯設計採用預存程序,須盡可能在資料庫這端處理資料排序的方式。

  • 第 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

alt

此種作法有個小秘技,當CASE WHEN 無法串列多個欄位時,

筆者將各型別均轉型為CHAR後(不是VARCHAR),串接各欄位值為一個長字串做排序比較用如下圖:

alt