Skip to content Skip to footer

SQL Server - 函数

SQL Server - 函数SQL Server 中的函数与其他编程语言中的函数类似。SQL Server 中的函数包含执行特定任务的 SQL 语句。函数可以有输入参数,并且必须返回单个值或多条记录。

如果您的脚本重复使用相同的 SQL 语句集,那么可以将其转换为数据库中的函数。

函数类型SQL Server 函数有两种类型

系统函数:这些是每个数据库中都可用的内置函数。一些常见类型包括聚合函数、分析函数、排名函数、行集函数、标量函数。

用户定义函数 (UDF):由数据库用户创建的函数称为用户定义函数。UDF 有两种类型

标量函数:返回单个数据值的函数称为标量函数。表值函数:返回多条记录作为表数据类型的函数称为表值函数。它可以是单个 SELECT 语句的结果集。以下是 SQL Server 中用户定义函数的简化语法。

语法:用户定义函数 复制CREATE OR ALTER FUNCTION [schema_name.]function_name(@parameter_name parameter_data_type,...)

RETURNS

[WITH ]

AS

BEGIN

RETURN

END有关更多信息,请访问用户定义函数语法。

标量函数标量函数总是返回单个值。以下标量函数GetAvgSalary返回指定部门的平均工资。

示例:标量函数 复制CREATE or ALTER FUNCTION GetAvgSalary(@DeptID int)

RETURNS float --returns float type value

AS

BEGIN

DECLARE @avgSal float = 0; --declares float variable

-- retrieves average salary and assign it to a variable

SELECT @avgSal = AVG(Salary) FROM Employee

WHERE DepartmentID = @DeptID

RETURN @avgSal; --returns a value

END在上述示例中,CREATE or ALTER FUNCTION表示创建新函数或修改现有函数。GetAvgSalary是函数名,@DeptID是int类型的输入参数,RETURNS float指定函数将返回浮点类型的值。函数体以BEIGN开始,以END结束。RETURN @avgSal;返回存储在变量avgSal中的值。

注意:UDF 中错误处理受到限制。UDF 不支持 TRY-CATCH、@ERROR 和 RAISERROR。

标量函数可以在SELECT子句中调用,如下所示

SELECT dbo.GetAvgSalary(5);您也可以从存储过程调用函数,如下所示。

示例:在存储过程中调用函数 复制CREATE PROCEDURE dbo.uspCallUserFunction(@DeptID int)

AS

BEGIN

SELECT dbo.GetAvgSalary(@DeptID)

END表值函数表值函数返回一条或多条记录作为表数据类型。

以下表值函数返回Employee表中HireDate大于传入输入参数的所有行。

示例:内联表值函数 复制CREATE or ALTER FUNCTION dbo.GetEmployeeList(@hiredate date)

RETURNS TABLE

AS

RETURN

SELECT * FROM Employee

WHERE HireDate > @hiredate;上述GetEmployeeList()函数是内联表值函数,因为它包含单个语句。

以下示例执行表值函数,返回 2010/01/01 之后入职的员工列表。

SELECT * FROM dbo.GetEmployeeList('01/01/2010')多语句表值函数可以包含多个语句,如下所示。

示例:多语句表值函数 复制CREATE or ALTER FUNCTION dbo.GetSeniorEmployees()

RETURNS @SrEmp Table

(

EmpID int,

FirstName varchar(50)

)

AS

BEGIN

Insert into @SrEmp Select EmployeeID, FirstName from Employee;

delete from @SrEmp where EmpID > 10; --delete other employees

return

end上述GetSeniorEmployees()函数在BEGIN和END之间包含多个语句。它声明一个表@SrEmp,将所有员工插入其中,然后删除一些员工。因此,您可以在表值函数中包含多个语句。

您可以在对象资源管理器中“函数”文件夹下查看新创建的用户定义函数。

使用 SSMS 创建用户定义函数步骤 1:打开 SQL Server Management Studio 并连接到数据库。

步骤 2:展开您要创建函数的数据库。展开“可编程性”。

步骤 3:右键单击“函数”并选择“新建”。您将获得 3 个选项 –

内联表值函数多语句表值函数标量值函数步骤 4:根据返回值单击适合您新函数的选项。这将在查询窗口中打开一个创建函数的模板,如下所示。

编写适当的语句并执行脚本以创建函数。刷新对象资源管理器中的数据库,以在“函数”文件夹下查看已创建的函数。

删除用户定义函数使用 DROP 语句删除函数,如下所示。

示例:删除函数 复制DROP FUNCTION dbo.GetEmployeeList;用户定义函数的优点更快的执行:与存储过程类似,UDF 通过缓存计划并将其用于未来的执行来降低 T-SQL 的编译成本。减少网络流量:函数的 SQL 语句在数据库中执行,调用它的应用程序需要向数据库发出函数调用。支持模块化编程:UDF 可以独立于应用程序源代码进行修改。您可以一次性创建 UDF 并将其存储在数据库中,它们可以被多次调用。了解 SQL Server 中函数与存储过程的区别。

Copyright © 2088 天使游戏开发中心 - 独立游戏活动资讯 All Rights Reserved.
友情链接