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学生的相关信息


本文标签: 函数 类型 学生 成绩 姓名