自定义函数:根据自己的需要,自定义一些函数 自定义函数分为三类:
- 标量函数:对单一值的操作,返回单一值,用begin end包括起来
- 内嵌表值函数:是一种参数化的视图,返回一个表,没有begin end包括起来
- 多声明表值函数:返回的也是一个表,用begin end包括函数体,是标量函数和内嵌表值函数的结合体
--标量函数:返回唯一值 用于查询
create function [dbo].GetUserAge(@UserId int)
--create function [dbo].GetUserAge(@UserId int=2) --参数中设置默认值
returns int
--with encryption 用于函数加密
as
begin
declare @age int
select @age=Age from UserInfos where UserId = @UserId
return @age
end
go
--函数调用
select dbo.GetUserAge(3) as 年龄
select dbo.GetUserAge(default) as 年龄 --调用的时候用default
--注意点:
--1.创建标量函数的时候,如果指定了所有者,调用的时候也必须指定函数所有者
--2.调用时,如果函数中指定了默认值,调用时参数用default替代,如果函数中没有默认值,调用时使用default则返回null
--3.语法上:returns 返回值类型 return 表达式/值
--4.begin end 中间不能有修改数据的操作
--内嵌表值函数
create function [dbo].GetUserInfo(@userId int)
returns table
as
return(
select UserId,UserName,Age,DeptId from UserInfos
where UserId=@userid
)
go
--调用函数
select * from dbo.GetUserInfo(27)
注意点:
1.returns table --只能跟table
2.as 后面没有begin end 只能是return select(select语句)
--多语句表值函数
create function [dbo].SearchUsers(@uName varchar(50))
returns @users table(
Id int not null primary key,
name varchar(50) not null,
age int null
)
as
begin
--函数体
insert into @users(Id,name,age)
select UserId,UserName,Age from UserInfos
where UserName like '%'+@uName+'%'
return --后面什么也不跟
end
go
--调用
select * from dbo.SearchUsers('lqq')
注意点:
1.创建标量函数的时候,如果指定了所有者,调用的时候也必须指定函数所有者
2.return --后面什么也不跟
3.函数一般用作查询使用,不能用于数据修改
4.如果用内嵌表值函数能满足需求,就不要使用多语句表值函数