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 中函数与存储过程的区别。