SQL Server 2000 引入了強大的使用者定義函數(User-Defined Functions, UDF),可封裝可重複使用的 Transact-SQL 邏輯,支援標量、內嵌資料表值、多重陳述式資料表值三種類型。本文整理自官方線上叢書,供開發參考。
CREATE FUNCTION [owner_name.] function_name
( [ @parameter_name [AS] scalar_parameter_data_type [ = default ] ] [ ,...n ] )
RETURNS scalar_return_data_type
[ WITH [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
CREATE FUNCTION [owner_name.] function_name
( [ @parameter_name [AS] scalar_parameter_data_type [ = default ] ] [ ,...n ] )
RETURNS TABLE
[ WITH [ ,...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
CREATE FUNCTION [owner_name.] function_name
( [ @parameter_name [AS] scalar_parameter_data_type [ = default ] ] [ ,...n ] )
RETURNS @return_variable TABLE
[ WITH [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
::= { ENCRYPTION | SCHEMABINDING } ::= ( { column_definition | table_constraint } [ ,...n ] )| 參數 | 說明 |
|---|---|
owner_name | 函數擁有者的使用者 ID,必須為現有使用者。 |
function_name | 函數名稱,需符合識別碼規則,在擁有者下必須唯一。 |
@parameter_name | 函數參數,最多 1,024 個。以 @ 開頭,符合識別碼規則。預設值需在呼叫時指定 DEFAULT 關鍵字(異於預存程序)。 |
scalar_parameter_data_type | 參數資料型別。支援所有標量型別(含 bigint, sql_variant),不支援 timestamp、使用者定義型別、非標量型別(cursor, table)。 |
scalar_return_data_type | 標量函數傳回型別。支援所有標量型別,除外 text, ntext, image, timestamp。 |
TABLE | 指定傳回資料表。內嵌函數由單一 SELECT 定義;多重陳述式函數使用資料表變數累積資料列。 |