admin 管理员组文章数量: 1087136
2024年4月16日发(作者:精通语言最多的人)
5.20---自定义函数
三、自定义函数
当系统内部函数的功能不能满足用户的需要时,用户可以自定义
函数。一般情况下,用户自定义的函数被SQL调用后都有返回
值。定义函数时需要定义形参,调用函数时要有实参传递给形参。
形参和实参在类型、数量和顺序上应该一一对应。用户自定义函
数有确定的函数值类型。
(一)标量函数
1.标量函数的定义
用户自定义函数的语法格式如下:
create function <函数名>
( @参数名称1 变量类型1[,……]) ---定义形式参数
returns 变量类型 ------函数返回值的类型
as
begin
命令行或语句块
return
表达式
----
函数返回的表达式,注意和
RETURNS
的区别
end
语法注释:
( @参数名称1 变量类型1[,……]) 函数所定义的形参
returns 变量类型 指函数返回的数据类型;
return 表达式 向调用该函数的T-SQL语句返回一个值。
2、标量函数的调用
格式一:select dbo.函数名(实参列表)
如:select (’李四’)
格式二、EXEC dbo.函数名 实参
EXEC dbo.函数名 形参=实参
例1、 编写一个函数,该函数的功能是接收传来的两个日期值,
计算这两个日期值之间在年份上的差。
create function func1 --创建自定义函数func1
(@birthday datetime,@now datetime) --定义两个形式参数
returns tinyint --函数返回值的数据类型
as
begin
return datediff(yy,@birthday,@now) --函数体
end
调用:
select sname,1(sbirth,getdate()) from s---DBO是当前
用户不能省略
select 1('1986-01-23','2001-02-23')
建立一个函数,计算某个学生各科成绩之和。
create function ss(@s_name char(8))
returns int
as
begin
declare @sumgrade int
set @sumgrade=(select sum(grade)
from sc
where sno=(
select sno
from s
where sname=@s_name)
group by sno)
return @sumgrade
end
go --表示批处理的结束
调用:
方式一:
select (’李四’)
方式二:
declare @sumgrade int
exec @sumgrade= ’李四’
print @sumgrade
方式三:
declare @sumgrade int
exec @sumgrade= @s_name='李丽' ----定义函数时的
形式参数。
print @sumgrade
例:建立数据表s_g,要求包含学生姓名和各科成绩
create table s_g
(姓名 char(8),
sumgrade as (姓名))
建立完毕后,打开s_g表,在列姓名输入姓名,回车后,成绩列
自动出现成绩。
(二)内嵌表值函数
1、定义
create function <函数名>
( @参数名称1 变量类型1[,……]) ---定义形式参数
returns
表
------函数返回值的类型
as
begin
命令行或语句块
return 内嵌表 ----
函数返回的表达式,注意和
RETURNS
的区别
end
2、调用
select * from 数据库名.拥有者.函数名(实参)
例:create function f5()
returns table
as
return (select * from sc )
调用函数:select * from dbo.f5()
执行结果:显示sc表中所有记录
例:查询某个人的相关选课信息和成绩
create function f6(@number char(10))
returns table
as
return (select * from sc where 学号=@number)
调用函数为:select * from dbo.f6(’95001’)
select * from dbo.f6(200102) ,引号加不加都可以
执行结果:显示学号为95001学生的相关信息
版权声明:本文标题:自定义函数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713260135a626400.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论