SQL Server 自 2000 版起支援使用者自訂函數(UDF),雖然已有預存程序,但函數在 SELECT 陳述式中直接呼叫、支援遞迴、可用於 CHECK 約束等特性,使其成為不可或缺的工具。本文從產生背景、發展歷程、三大類型結構、建立語法、適用範圍、注意事項到常見疑問,全方位解析 UDF。
| 類型 | 回傳形式 | 函數本體 | 典型用途 |
|---|---|---|---|
| 標量函數 | 單一值 | BEGIN...END 區塊,RETURN 運算式 | 計算、轉換、格式化單一值 |
| 內聯表值函數 | Table | 無 BEGIN...END,單一 RETURN SELECT | 參數化檢視表,單一查詢回傳結果集 |
| 多陳述表值函數 | Table 變數 | BEGIN...END,需宣告 @return_variable TABLE(...),以 INSERT 累積資料 | 多步驟查詢、複雜邏輯組合後回傳表 |
CREATE FUNCTION [schema.]function_name (@param type, ...)
RETURNS scalar_type
[WITH ENCRYPTION | SCHEMABINDING]
AS
BEGIN
-- 邏輯
RETURN scalar_expression
END
CREATE FUNCTION [schema.]function_name (@param type, ...) RETURNS TABLE [WITH ...] AS RETURN (SELECT ...)
CREATE FUNCTION [schema.]function_name (@param type, ...)
RETURNS @return_var TABLE (col_def, ...)
[WITH ...]
AS
BEGIN
INSERT @return_var SELECT ...
RETURN
END
答:僅能呼叫擴展預存程序,但 SQL Server 後續版本已移除此支援,實務開發中應避免在函數中呼叫任何會修改資料的程序,確保無副作用原則。