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

SQL Server 2000 新功能:使用者定義函數 (UDF) 完整入門

     編輯:關於SqlServer

什麼是 UDF?

使用者定義函數 是 SQL Server 2000 引入的可程式化物件,功能類似內建函數(如 CONVERT、DATEADD),可接受 0~1024 個參數,並回傳單一純量值或資料表。UDF 讓商業邏輯封裝在資料庫層,提升重用性與維護性。

建立語法架構

CREATE FUNCTION [schema.]function_name
(
    @parameter_name scalar_data_type [, ...n]
)
RETURNS scalar_return_data_type
[WITH  [, ...n]]
[AS]
BEGIN
    function_body
    RETURN scalar_expression
END

關鍵限制

  • 參數不支援 timestamp、cursor、table 型別。
  • 回傳值不支援 text、ntext、image、timestamp、cursor、table。
  • 函數本體 必須 包裹在 BEGIN ... END 區塊,否則會報錯「Incorrect syntax near 'RETURN'」。

函數選項說明

選項用途
ENCRYPTION加密函數定義,防止被 sp_helptext 檢視。
SCHEMABINDING綁定參考物件結構,防止被參考的資料表/欄位被修改或刪除(SQL 2000 新增,亦可用於檢視表)。

實戰範例:Greatest / Least 兩值極值函數

SQL Server 缺少 GREATEST/LEAST,我們自行實作:

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

使用方式:SELECT dbo.Greatest(10, 25); -- 回傳 25

大小寫轉換函數雛形

原文提到的 @String、@Capitalize_What 參數設計,可延伸為自訂 ProperCase、ToggleCase 等字串處理工具,詳情請參考後續進階篇。

最佳實務建議

  • 純量 UDF 在大量資料集的 SELECT 清單中逐列執行,效能較差;若可能請改用 INNER JOIN 或 APPLY 搭配內嵌資料表值函數。
  • 善用 SCHEMABINDING 保護核心邏輯不被意外 DDL 破壞。
  • 避免在 UDF 中進行永久性資料修改(INSERT/UPDATE/DELETE),否則會限制其在查詢中的使用場合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved