在 SQL Server 中,自定义函数(User-Defined Functions,简称 UDF)是一种用户定义的函数,它可以接受参数并返回一个值。自定义函数可以用于执行计算、逻辑判断或返回复杂的数据集。SQL Server 支持两种类型的用户定义函数:
-
标量函数(Scalar-Valued Functions):返回单个值。
-
表值函数(Table-Valued Functions):返回一个结果集。
创建标量函数
创建标量函数的基本语法如下:
CREATE FUNCTION function_name
([@parameter1 datatype [, @parameter2 datatype] ...])
RETURNS datatype
AS
BEGIN
-- 函数体
RETURN @return_variable
END
创建如下函数
CREATE FUNCTION GETTOTALCOUNT(@BSNAME NVARCHAR(20))
RETURNS INT
AS
BEGIN
DECLARE @TOTALCOUNT INT
SELECT @TOTALCOUNT=COUNT(*) FROM STOCK WHERE STONAME=@BSNAME
RETURN @TOTALCOUNT
END
GO
使用SELECT DBO.GETTOTALCOUNT('张三')调用函数得到
注意:调用要使用DBO.
创建表值函数
创建表值函数的基本语法如下:
CREATE FUNCTION function_name
([@parameter1 datatype [, @parameter2 datatype] ...])
RETURNS @return_table TABLE (column1 datatype [, column2 datatype] ...)
AS
BEGIN
-- 函数体
-- 插入数据到@return_table
RETURN
END
示例
标量函数示例
以下是一个简单的标量函数示例,它计算两个数字的和:
CREATE FUNCTION AddNumbers
(@num1 INT, @num2 INT)
RETURNS INT
AS
BEGIN
RETURN @num1 + @num2
END
表值函数示例
以下是一个简单的表值函数示例,它返回一个表,包含两个数字的和与差:
CREATE FUNCTION GetNumbers
(@num1 INT, @num2 INT)
RETURNS TABLE
AS
RETURN
(
SELECT @num1 + @num2 AS Sum, @num1 - @num2 AS Difference
)
使用自定义函数
创建函数后,你可以在 SQL 查询中像使用内置函数一样使用它们:
-- 使用标量函数
SELECT dbo.AddNumbers(10, 20) AS Result
-- 使用表值函数
SELECT * FROM dbo.GetNumbers(10, 20)
注意事项
-
函数不能修改数据库中的数据,它们是只读的。
-
函数不能包含控制流语句,如
WAITFOR
或WHILE
。 -
函数不能调用会修改数据的存储过程。