📅  最后修改于: 2023-12-03 14:50:15.194000             🧑  作者: Mango
在 SQL Server 中,函数是一种可以在 SQL 语句中调用的特殊操作。创建函数可以使得代码重用更加简单,而不是重复性地在多个查询中编写相同的代码。
SQL Server 提供了 CREATE FUNCTION
语句,用于创建一个函数。函数可以有 0 个或多个参数,可以返回一个值或一个表。以下是 CREATE FUNCTION
语法:
CREATE FUNCTION [schema_name].function_name
[ (@parameter [data_type]
[ VARYING ]
[ = default ]
), ...n ]
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
END;
其中,方括号表示可选参数。
schema_name
- 函数所属的模式名称。如果未指定,则默认为 dbo
模式。function_name
- 函数名称。parameter
- 函数的输入参数。这些参数可以是标量或表值参数,并可用于在函数内部操作结果。函数参数必须遵循 SQL Server 的标识符命名规则。data_type
- 参数的数据类型。VARYING
- 参数是否是可变长度类型。default
- 参数的默认值。n
- 参数数量。return_data_type
- 函数返回的数据类型。这个可以是标量或表类型。WITH <function_option> [ ,...n ]
- 可选项,如 ENCRYPTION 和 RECOMPILE。ENCRYPTION 用于将函数定义加密,RECOMPILE 用于在每次调用函数时重新编译函数定义。
AS
- 可以使用两种方式指定函数主体。可以在 AS
后面加入 BEGIN...END
语句块;或者省略 AS
,将语句主体写在函数名称后面。
function_body
- 函数主体。是一系列的 SQL 语句,用于计算和返回函数结果。
下面是一个简单的例子,演示如何创建一个返回两个数字之和的函数:
CREATE FUNCTION dbo.add_two_numbers
(@x INT, @y INT)
RETURNS INT
AS
BEGIN
RETURN @x + @y
END;
在这个例子中,我们定义了名为 add_two_numbers
的函数,接受两个整数输入值,并返回它们的和。函数定义了两个参数 @x
和 @y
,传递给函数的两个整数值。
以下是另一个例子,演示如何创建一个返回客户 ID 和销售总额的表值函数:
CREATE FUNCTION dbo.sales_by_customer
(@customer_id INT)
RETURNS TABLE
AS
RETURN
(SELECT c.CustomerID, SUM(i.ExtendedPrice) AS SalesTotal
FROM Sales.SalesOrderDetail i, Sales.SalesOrderHeader h, Sales.Customer c
WHERE i.SalesOrderID = h.SalesOrderID AND h.CustomerID = c.CustomerID
AND c.CustomerID = @customer_id
GROUP BY c.CustomerID);
注意,表值函数使用 RETURNS TABLE
语法,并使用子查询返回计算结果。
本文介绍了 SQL Server 中创建函数的语法以及一些例子。函数使得 SQL 查询重用和组合非常方便,同时也可以简化代码,并且提供了更好的可维护性和可重用性。