用户定义的函数

用户自己定义的函数可以分为如下三个类别:

(1) 返回值为可更新表的函数,这样的函数称为内嵌表值函数;

(2) 返回不可更新表的函数,这样的函数称为多语句表值函数;

(3) 返回标量值的函数

注意:用户自定义函数不支持输出函数。

6.5.1 标量函数的定义
Create function owname_name, function_name

(@parameter_name as data_type,….)

Returns data_type

[with encryption | schemabinding.]

[as]

Begin



End

例子:/*计算全体学生某们功课的平均成绩*/

create function average

(@cnum char(20))

returns int

as

begin

declare @aver int

select @aver=

(select avg(score) from xs_kc where kc_id=@cnum group by kc_id)

return @aver

end

6.5.2标量函数的调用
(1)在select语句中调用

例子:/*在select语句中调用*/

declare @course1 char(20)

declare @aver1 int

select @course1='101'

select @aver1=dbo.average(@course1)

select @aver1 as '101课程的平均成绩'

(2)利用EXEC语句执行

例子:/*exec语句中调用*/

declare @course1 char(20)

declare @aver1 int

select @course1='101'

exec @aver1=dbo.average @course1

select @aver1 as '101课程的平均成绩'

例子:/*新建course表*/

use xscj

create table course

(cno int

,cname nchar(20)

,credit int

,aver as (dbo.average(cno))

)

6.5.3 内嵌表值函数
内嵌表值函数可用于实现参数化视图。

/*内嵌表值函数的定义*/

create function fn_view1

(@para nvarchar(30))

returns table

as

return

(

select stu_id,stu_name from xscj.dbo.xs where stu_major=@para

)

/*内嵌表值函数的调用*/

select * from fn_view1(N'计算机')

6.5.4 多语句表值函数
内嵌表值函数和多语句表值函数都返回表,二者不同之处在于:内嵌表值函数没有函数主体,返回的表是单个select语句的结果集;而多语句表值函数在begin…end块中定义的函数主体包含T-SQL语句,这些语句可生成行并将行插入至表中,最后返回表。

例子:/*创建返回table的函数,通过学号作为实参调用该函数,可显示该学生各门功课的成绩和学分*/

Create function score_table

(@student_id char(6))

returns @score table

(xs_id char(6)

,xs_name char(8)

,kc_name char(16)

,cj tinyint

,xf tinyint

)

as

begin

insert @score

select s.stu_id,s.stu_name,p.kc_name,p.kc_credit,o.score

from xs as s

inner join xs_kc as o on (s.stu_id=o.stu_id)

inner join kc as p on (o.kc_id=p.kc_id)

where s.stu_id=@student_id

return

end

/*多语句表值函数的调用*/

select * from score_table('001103')
posted @ 2008-05-07 11:33  乱炖er  阅读(374)  评论(0编辑  收藏  举报