数据库 用户自定义函数

用户自定义函数

用户自定义函数和存储过程比较

比较项 存储过程 用户自定义函数
参数 允许有多个输入输出参数 允许有0到多个输入参数,不允许有多个输出参数(且参数要用用括号括起来)
返回值 可以没有返回值 有且只有一个返回值
调用 使用excute调用 在表达式或者赋值语句中调用

创建用户自定义函数

(1)创建标量型函数
eg:1)在student数据库中,创建标量函数,统计“课程”表中总共有多少条门课程,写出程序代码。(要求:在建立函数之前,为排除重名函数,先判断要创建的函数是否存在,如果存在则先删除。)

use student
go
if exists (select name from sysobjects where name = 'Ccount' and type = 'FN')
drop function dbo.Ccount
go
create function dbo.Ccount()
returns int
as
begin
		declare @num int
		set @num = 0
		select @num = count(*)
		from 学生课程
		return @num
end
go
-- 调用函数查询
use student
go
declare @num int
set @num = 0
set @num = dbo.Ccount()
print '课程表中总共有:'+cast(@num as char(1)) + '门课程'
go


(2)创建内联表值函数(没有函数主体,表是单个select语句的结果,直接return select语句的值)
eg:在student数据库中,创建内嵌表值函数,该函数给出制定学生所选修课程记录,即“学号”作为输入参数,写出程序代码。

if exists (select name from sysobjects where name = 'Cchoose' and type = 'FN')
drop function dbo.Cchoose
go
create function dbo.Cchoose(@Cname as nvarchar(20))
returns table
as
return (select a.学号
		from 学生成绩 a,学生课程 b
		where  a.课程号 = b.课程号 and b.课程名称 = @Cname)
go
-- 调用函数查询选修C语言情况
use student
go
declare @Cname nvarchar(20)
set @Cname = 'C语言'
select *
from dbo.Cchoose(@Cname)
go

(3)创建多语句表值函数(返回一个表)

if exists (select name from sysobjects where name = 'Cchoose1' and type = 'FN')
drop function dbo.Cchoose1
go
create function dbo.Cchoose1 (@Cname as nvarchar(20))
returns @Cchoosetable table (学号 char(7))
as
begin
		insert @Cchoosetable
		select a.学号
		from 学生成绩 a,学生课程
		where  a.课程号 = b.课程号 and b.课程名称 = @Cname 
		return
end
go
-- 调用函数查询学修C语言情况
use student
go
declare @Cname nvarchar(20)
set @Cname = 'C语言'
select *
from dbo.Cchoose1(@Cname)
go

管理用户自定义函数

(1)查看用户自定义函数
exec sp_helptext 用户定义函数名称
exec sp_help 用户定义函数名称
(2)修改用户定义函数
alter function 用户自定义函数名

重写一遍函数的实现

(3)删除用户定义的函数
drop function 用户自定义的函数名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章