SQL Server 2000 引入使用者自訂函數(User-Defined Function, UDF),功能類似內建系統函數(如 CONVERT、SUBSTRING),可接受 0~1024 個參數,回傳單一標量值。UDF 不可回傳 text、ntext、image、timestamp、cursor、table 等型別。
CREATE FUNCTION [擁有者.]函數名稱
( { @參數名稱 資料型別 [, ...n] } )
RETURNS 回傳資料型別
[WITH <函數選項> [, ...n]]
[AS]
BEGIN
函數主體
RETURN 純量運算式
END
函數主體必須以 BEGIN ... END 包裹,並支援 ENCRYPTION 與 SCHEMABINDING 選項。
為了區別內建彙總函數 MAX/MIN,建立兩個標量函數分別回傳兩值中的最大值與最小值,核心邏輯使用 CASE 運算式。
CREATE FUNCTION dbo.Greatest
(
@Val1 SQL_VARIANT,
@Val2 SQL_VARIANT
)
RETURNS SQL_VARIANT
AS
BEGIN
RETURN (CASE WHEN @Val1 > @Val2 THEN @Val1 ELSE @Val2 END);
END;
GO
CREATE FUNCTION dbo.Least
(
@Val1 SQL_VARIANT,
@Val2 SQL_VARIANT
)
RETURNS SQL_VARIANT
AS
BEGIN
RETURN (CASE WHEN @Val1 < @Val2 THEN @Val1 ELSE @Val2 END);
END;
GO
這兩個函數可用於任何需比較兩值大小的場合,例如薪資計算、閾值判斷等,簡化 T-SQL 邏輯。
本文介紹 UDF 基本架構、建立語法,並以 Greatest/Least 為例展示標量函數的撰寫與應用。下集將深入探討字串處理函數實作。