数据库 用户自定义函数

文章目录

用户自定义函数

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

比较项存储过程用户自定义函数
参数允许有多个输入输出参数允许有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 用户自定义的函数名

    原文作者:编程猴
    原文地址: https://blog.csdn.net/qq_43573718/article/details/104173495
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞