SQL Server用户自定义函数:
|| SQL Server用户自定义的函数有:标量函数、表值函数(内联表值函数、多语句表值函数)两种。
标量函数:所谓标量函数就是返回的结果只是一个标量(一种类型的一个值)。
CREATE FUNCTION GetSum
(
@firstNum int,
@secondNum int
)
RETURNS int
AS
BEGIN
DECLARE @result int
SELECT @result=@firstNum+@secondNum
RETURN @result
END
GO
题外话:我们来看看上面的写法,对于SQL Server来讲,我们声明一个变量的方式是用@变量名,而且相对于编程来讲:以下是其不同点
1:声明时是先变量后面才是类型。
2:对于返回方式,SQL Server函数的返回类型并不放在函数名前面,而是函数名括号的后面。而且函数的返回类型需要用到返回关键字RETURNS,而不是RETURN。
3:函数体。若需要在函数体里面声明变量的话,则需要使用到DECLARE关键字进行声明。函数体内的返回才是关键字RETURN。 它的函数体写法:
AS
BEGIN
-- 函数体
END
内联表值函数:返回的是表。表的类型就是Table。
CREATE FUNCTION [GetMoreThanSalary]
(
@salary int
)
RETURNS TABLE
AS
RETURN
(
SELECT [FName],[FCity],[FAge],[FSalary] FROM [Demo].[dbo].[T_Person] Where [FSalary] > @salary
)
GO
题外话:标量函数上面提过的内容,这里就不重复了。内联表函数返回的表结构由函数体内的SELECT语句来决定。
对于标量函数来讲,函数体是包含在如下结构中。
AS
BEGIN
-- 函数体
END
但是对于内联表值函数来讲,函数体的结构则是如下的方式。内联表值函数只执行一条SQL语句后返回Table结果。
AS
RETURN
-- 函数体
END
多语句表值函数:能够支持多条语句的执行来创建Table数据。
(类似于一个返回类型为表的标量函数,需要指定具体的Table类型的结构。也就是说返回的Table,已经定义好要哪些字段返回)
写法如下:
ALTER FUNCTION DemoFun
(
)
RETURNS
@result TABLE
(
name nvarchar(20),
city nvarchar(20),
age int,
salary int
)
AS
BEGIN
insert into @result(name, city, age, salary)
select FName,FCity,FAge,FSalary from dbo.T_Person where FSalary>8000
insert into @result(name, city, age, salary) values
('测试','China', 1, 0)
RETURN
END
GO