共用方式為


使用者自訂函數的基本概念

Microsoft SQL Server 2005 使用者自訂函數與程式設計語言函數類似,是接受參數、執行動作 (如複雜計算) 以及傳回該動作所得值的常式。傳回的值可以是單一純量值或結果集。

使用者自訂函數的好處

使用 SQL Server 中使用者自訂函數的好處如下:

  • 可進行模組化的程式撰寫。
    只需建立函數一次,將它儲存在資料庫中,就可以在程式中無限次地隨意呼叫。使用者自訂函數不需透過原始程式碼即可修改 。
  • 可加快執行速度。
    如同預存程序,Transact-SQL 使用者自訂函數可藉由針對重複執行來快取以及重複使用計劃,來降低 Transact-SQL 程式碼的編譯成本。這表示,每次使用時,使用者自訂函數不需要重新剖析和最佳化,所以執行時間可以更快。
    與 Transact-SQL 函數相比,CLR 函數在計算工作、字串處理和商務邏輯等方面提供更顯著的效能優勢。Transact-SQL 函數更適用於經常需要進行資料存取的作業。
  • 可降低網路傳輸量。
    對於無法以單一純量運算式表示的作業 (例如,根據某些複雜條件約束來篩選資料),可以利用函數來表示。接著,您可以在 WHERE 子句中叫用函數,減少傳送到用戶端的資料列數。

使用者自訂函數的元件

在 SQL Server 2005 中,您可以使用 Transact-SQL 或任何 .NET 程式語言來撰寫使用者自訂函數。如需使用 .NET 程式語言的詳細資訊, 請參閱<CLR User-Defined Functions>。

所有使用者自訂函數都有兩個相同的結構:標頭和主體。函數會使用 0 或多個輸入參數,並傳回純量值或資料表。

標頭可定義:

  • 具有選擇性結構描述/擁有者名稱的函數名稱
  • 輸入參數名稱和資料類型
  • 適用輸入參數的選項
  • 傳回參數資料類型和選擇性名稱
  • 適用傳回參數的選項

主體會定義函數要執行的動作或邏輯。它包含:

  • 一或多個執行函數邏輯的 Transact-SQL 陳述式
  • .NET 組件的參考

以下範例顯示簡單的 Transact-SQL 使用者自訂函數,並識別函數的主要元件。此函數會計算提供的日期,且傳回的值會指明該日期在一星期中為哪一天。

IF OBJECT_ID(N'dbo.GetWeekDay', N'FN') IS NOT NULL
    DROP FUNCTION dbo.GetWeekDay;
GO
CREATE FUNCTION dbo.GetWeekDay           -- function name
(@Date datetime)                     -- input parameter name and data type
RETURNS int                          -- return parameter data type
AS
BEGIN                                -- begin body definition
RETURN DATEPART (weekday, @Date)     -- action performed
END;
GO

以下範例顯示 Transact-SQL 陳述式中使用的函數。

SELECT dbo.GetWeekDay(CONVERT(DATETIME,'20020201',101)) AS DayOfWeek;
GO

以下為結果集:

DayOfWeek
---------
6  
(1 row(s) affected)

請參閱

概念

函數類型

其他資源

瞭解使用者自訂函數

說明及資訊

取得 SQL Server 2005 協助