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

資料庫查詢結果動態排序(五):使用者定義函數 (UDF) 實作、TOP 100 PERCENT 技巧與函數調用方式

     編輯:關於SqlServer

UDF 實作動態排序

SQL Server 2000 支援表值函數,可封裝動態排序邏輯:

Listing 10:UDF 初版(含錯誤)
CREATE FUNCTION ufn_GetSortedShippers(@ColName AS SYSNAME)
RETURNS TABLE
AS
RETURN
SELECT *
FROM Shippers
ORDER BY
    CASE @ColName
        WHEN 'ShipperID' THEN ... -- 字串化邏輯
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'Phone' THEN Phone
        ELSE NULL
    END

錯誤與解決方案

錯誤訊息: Msg 1033: The ORDER BY clause is invalid in views, inline functions, and subqueries, unless TOP is also specified.

原因: 檢視表/內嵌函數/子查詢應回傳無序集合,ORDER BY 需搭配 TOP。

技巧: 使用 SELECT TOP 100 PERCENT * 替代 SELECT *,滿足語法要求並保留完整排序結果。

修正版 UDF
CREATE FUNCTION ufn_GetSortedShippers(@ColName AS SYSNAME)
RETURNS TABLE
AS
RETURN
SELECT TOP 100 PERCENT *
FROM Shippers
ORDER BY
    CASE @ColName
        WHEN 'ShipperID' THEN ... 
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'Phone' THEN Phone
        ELSE NULL
    END

函數調用方式

SELECT * FROM ufn_GetSortedShippers('ShipperID')

總結

掌握參數化排序多種技術:CASE 運算式、動態 SQL、Richard 多 CASE 法、UDF + TOP 100 PERCENT 技巧,可依應用場景靈活選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved