基本信息
文件名称:第9章T-SQL编程教学课件.ppt
文件大小:1.91 MB
总页数:10 页
更新时间:2025-06-04
总字数:约8.22千字
文档摘要

?SQLServer用户定义函数可以针对特定应用程序问题提供解决方案,目的主要是为了求值。用户定义函数都是经过封装的T-SQL子程序,可以通过其他T-SQL代码调用这些子程序来返回单一的值或者数据表值。9.3.2用户定义函数根据用户定义函数返回值的类型,可将用户定义函数分为如下三个类别:(1)标量函数:返回标量值(单个值)的函数。(2)内嵌表值函数:函数中只包含一个T-SQL语句,而返回值为多个值,就好像是形成了一个新的表。(3)多语句表值函数:函数中可以包含多个T-SQL语句,返回值就是形成一个数据表。9.3.2用户定义函数**定义语法:CREATEFUNCTION[owner_name.]function_name/*函数名部分*/?([{@parameter_name[AS]parameter_data_type[=default]}[,...n]])/*形参定义部分*/RETURNSreturn_data_type/*返回值的类型*/[AS]BEGINfunction_body/*函数体部分*/???? RETURNexpression/*返回语句*/END(1)标量函数9.3.2用户定义函数【例9-20】求某门课的平均成绩CREATEFUNCTIONaverage(@cnchar(4))RETURNSfloatASBEGINDECLARE@averfloatSELECT@aver=(SELECTavg(score)FROMscWHEREcno=@cn)RETURN@averENDGO9.3.2用户定义函数当调用用户定义的标量函数时,必须提供至少由两部分组成的名称(所有者名.函数名)。可以在SELECT语句或用EXEC命令调用,调用形式:所有者名.函数名(实参1,…,实参n)实参可为已赋值的局部变量或表达式。**标量函数的调用【例9-21】求C001号课的平均成绩USEteachingDECLARE@course1char(4)SET@course1=C001SELECTdbo.average(@course1)ASC001号课程的平均成绩9.3.2用户定义函数也可以在建表时使用函数求某列。**标量函数的调用【例】新建course1表createtablecourse1(cnochar(4)primarykey,cnamenvarchar(20),creditint,averas(dbo.average(cno)))9.3.2用户定义函数**定义语法:CREATEFUNCTION[owner_name.]function_name/*定义函数名部分*/([{@parameter_name[AS]parameter_data_type[=default]}[,...n]])/*定义参数部分*/RETURNSTABLE/*返回值为表类型*/[AS]RETURN[(select-stmt[])]/*通过SELECT语句返回内嵌表*/(2)内嵌表值函数9.3.2用户定义函数【例9-22】查询某个专业所有学生的学号、姓名、所选的课程号和成绩。USEteachingGOCREATEFUNCTIONst_func(@majornchar(20))RETURNStableASreturnSELECTa.sno,sname,cno,scoreFROMstudenta,scWHEREspecialty=@majoranda.sno=sc.sno9.3.2用户定义函数【例9-23】查询计算机专业所有学生的学号、姓名、所选的课程号和成绩。**内嵌表值函数的调用内嵌表值函数只能通过SELECT语句调用,就像查询一个表一样,内嵌表值函数调用时,可以仅使用函数名,省略所有者名。Useteachingg