一、自定义函数的分类
1)标量值函数
2)表值函数(内联表格值函数,多语句表值函数)
二、自定义函数和存储过程的区别
1)自定义函数:
1. 可以返回表变量
2. 限制颇多,包括:
不能使用output参数;
不能用临时表;
函数内部的操作不能影响到外部环境;
不能通过select返回结果集;
不能update,delete,数据库表;
3. 必须return 一个标量值或表变量
自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
2)存储过程
1. 不能返回表变量
2. 限制少,可以执行对数据库表的操作,可以返回数据集
3. 可以return一个标量值,也可以省略return
存储过程一般用在实现复杂的功能,数据操纵方面。
三、自定义函数的使用
1)创建标量值函数
go
create function convert_sex
(
@sex bit
)
returns varchar(4) --返回的数据类型
as
begin
declare @rsex varchar(4)
if @sex=1
select @rsex='男'
else
select @rsex='女'
return @rsex
end
–调用标量值函数
go
select *,dbo.convert_sex(Sex) from Customers
2)创建内联表格值函数
go
create function Customers_table
(
@country nvarchar(50)
)
returns table
as
return (select * from Customers where Country=@country)
--调用内联表格值函数
go
select * from Customers_table('德国')
3)创建多语句表值函数
--创建多语句表值函数
go
create function Books_bookType_table
(
@booktypeID int
)
returns @books_booktype table
(
Name nvarchar(50),
Remark nvarchar(50),
BookTypeName nvarchar(50)
)
as
begin
insert @books_booktype(Name,Remark,BookTypeName)
select b.Name,b.Remark,bt.Name from Books b join bookType bt on b.BookTypeID=bt.ID
where bt.ID=@booktypeID
return
end
--调用多语句表值函数
go
select * from Books_bookType_table(1)