1.创建标量型UDF,语法如下:
CREATE FUNCTION [OWNER_NAME] FUNCTION_NAME
([{@PARAMETER_NAME SCALAR_PARAMETER_DATA_TYPE [= DEFAULT]} [,…N]])
RETURNS SCALAR_RETURN_DATA_TYPE
[WITH <FUNCTION_OPTION> [,…N]]
[AS]
BEGIN
FUNCTION_BODY
RETURN SCALAR_EXPRESSION
END
<FUNCTION_OPTION> ::=
{ENCRYPTION|SCHEMABLNDING}
各参数说明如下:
OWNER_NAME:指定UDF的所有者;
FUNCTION_NAME:指定UDF的名称。DATABASE_NAME.OWNER_NAME.FUNCTION_NAME应是唯一的。
@PARAMETER_NAME:定义一个或多个参数的名称。一个函数最多可以定义1024个参数,每个参数前用@符号标明。参数的作用范围是整个函数,参数只能替代常量,不能替代表名,列名或其他数据库对象的名称。UDF不支持输出参数。
2.创建内联表值型UDF,语法如下:
CREATE FUNCTION [OWNER_NAME] FUNCTION_NAME
([{@PARAMETER_NAME SCALAR_PARAMETER_DATA_TYPE [=DEFAULT]}[,…N]])
RETURNS TABLE
[WITH <FUNCTION_OPTION> [,… ]]
[AS]
RETURN [() SELECT-STMT[]]
各参数说明如下:
TABLE:指定返回值为一个表。
SELECT-STMT:单个SELECT语句,确定返回的表是数据。
其余参数与标量型用户自定义函数相同。
例如:创建返回所有订购某类产品的公司信息函数
USE PANGU
GO
CREATE FUNCTION ORDERFIRMS(@PRODUCTID VARCHAR(30))
RETURNS TABLE
AS
RETURN (SELECT F.FIRM_ID,F_NAME,F_INTRO
FROM FIRMS F, ORDERS O
WHERE F.FIRM_ID=O.FIRM_ID
AND O.OEDER_ID IN (SELECT O.ORDER_ID
FROM PRODUCTS P, ORDERS O
WHERE P.P_ID=@PRODUCTID
AND P.P_ID)=O.P_ID))
GO
--调用函数
SELECT * FROM ORDERFIRMS(10030001)
运行结果如下:
3.创建多声明表值型UDF,语法如下:
CREATE FUNCTION [OWNER_NAME] FUNCTION_NAME
([{@PARAMETER_NAME SCALAR_PARAMETER_DATA_TYPE [= DEFAULT]}[,…N]])
RETURNS @RETURN_VARIBLE TABLE <TABLE_TYPE_DEFINITION>
[WITH <FUNCTION_OPTION> [,…N]]
[AS]
BEGIN
FUNCTION_BODY
RETURN
END
<TABLE_TYPE_DEFINITION> ::=
({COLUMN_DEFINITION|TABLE_CONSTRAINT} [,…N])
各参数说明如下:
@RETURN_VARIABLE:一个TABLE类型的变量,用于存储和累积返回的表中的数据行。
其余参数与标量型UDF相同。