T-SQL語法依使用者條件修改排序欄位
Dotlogs Tags: T-SQL
筆者近日遇到一個實例,系統需求是在資料查詢時提供選擇排序欄位,如下圖:
由於資料邏輯設計採用預存程序,須盡可能在資料庫這端處理資料排序的方式。
-
第 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
此種作法有個小秘技,當CASE WHEN 無法串列多個欄位時,
筆者將各型別均轉型為CHAR後(不是VARCHAR),串接各欄位值為一個長字串做排序比較用如下圖: