在本教程中,将了解SQL Server标量函数以及如何使用它们来封装公式或业务逻辑,并在查询中重用它们。

标量函数是什么

SQL Server标量函数接受一个或多个参数并返回单个值。

标量函数可帮助简化代码。 例如,可能有许多查询中出现的复杂计算。可以创建一个标量函数来封装公式并在查询中使用它,而不是在每个查询中包含公式。

创建标量函数

要创建标量函数,请使用CREATE FUNCTION语句,如下所示:

CREATE FUNCTION [schema_name.]function_name (parameter_list)

RETURN data_type AS

BEGIN

statements

RETURN value

END

在上面语法中,

首先,在CREATE FUNCTION关键字后指定函数的名称。架构名称是可选的。 如果没有明确指定它,SQL Server默认使用dbo。

其次,在函数名后面指定括号括起来的参数列表。

第三,在RETURN语句中指定返回值的数据类型。

第四,在函数主体内,必须包含一个RETURN语句来返回一个值。

以下示例创建一个根据数量,价格和折扣计算净销售额的用户定义函数:

CREATE FUNCTION sales.udfNetSale(

@quantity INT,

@list_price DEC(10,2),

@discount DEC(4,2)

)

RETURNS DEC(10,2)

AS

BEGIN

RETURN @quantity * @list_price * (1 - @discount);

END;

稍后,可以使用它来计算示例数据库中order_items中任何销售订单的净销售额。

创建标量函数后,可以在:可编程性 -> 函数 -> 标量值函数 下找到它,如下图所示:

调用标量函数

可以像调用内置函数一样调用标量函数。 例如,以下语句演示了如何调用udfNetSale函数:

SELECT

sales.udfNetSale(10,100,0.1) net_sale

执行上面语句,得到以下结果:

以下示例演示如何使用sales.udfNetSale函数获取order_items表中销售订单的净销售额:

SELECT

order_id,

SUM(sales.udfNetSale(quantity, list_price, discount)) net_amount

FROM

sales.order_items

GROUP BY

order_id

ORDER BY

net_amount DESC;

执行上面查询语句,得到以下结果:

修改标量函数

要修改标量函数,请使用ALTER而不是CREATE关键字。 其余的语句保持不变:

ALTER FUNCTION [schema_name.]function_name (parameter_list)

RETURN data_type AS

BEGIN

statements

RETURN value

END

请注意,如果不存在,则可以使用CREATE OR ALTER语句创建用户定义的函数,或者修改现有的标量函数:

CREATE OR ALTER FUNCTION [schema_name.]function_name (parameter_list)

RETURN data_type AS

BEGIN

statements

RETURN value

END

删除标量函数

要删除现有标量函数,请使用DROP FUNCTION语句:

DROP FUNCTION [schema_name.]function_name;

例如,要删除sales.udfNetSale函数,请使用以下语句:

DROP FUNCTION sales.udfNetSale;

SQL Server标量函数说明

以下是标量函数的一些关键点:

标量函数几乎可以在T-SQL语句中的任何位置使用。

标量函数接受一个或多个参数但只返回一个值,因此,它们必须包含RETURN语句。

标量函数可以使用IF块或WHILE循环等逻辑。

标量函数无法更新数据。可以访问数据,但这不是一个好习惯。

标量函数可以调用其他函数。

在本教程中,学习了如何使用SQL Server标量函数来封装复杂的公式或复杂的业务逻辑,并在查询中重用它们。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

更多推荐

mysql标量函数,SQL Server标量函数