实验六

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验六过程语言一、实验目的:通过本次实验,要求掌握变量定义,流程控制,存储过程,存储函数,游标等内容。二、实验内容:1)变量的声明和使用,掌握@@ERROR、@@ROWCOUNT、@@IDENTITY等全局变量的使用。2)使用BEGIN…END、IF…ELSE…、WHILE…CONTINUE…BREAK…、CASE等流程控制语句。3)使用存储过程。4)使用系统函数和用户自定义函数。5)使用游标处理数据。三、实验步骤:1)用T-SQL语言完成1+3+5……+199,并使用@@ERROE判断是否执行成功,如果成功则输出值,否则打印执行失败。使用WHILE语句实现。declare@sumintdeclare@iintset@sum=0set@i=1while(@i101)beginset@sum=@sum+@iset@i=@i+1endif@@error=0print@sumelseprint'执行错误'2)更新STUDENTS表中sid为876543210的学生的email为aaddff@sina.com.cn,并通过@@ROWCOUNT判断是否有数据被更新,如果没有则打印警告。USESchoolUPDATE…IF@@ROWCOUNT=0PRINT‘警告!没有数据被更新’updatestudentssetemail='aaddff@sina.com.cn'wheresid='876543210'if@@rowcount=0print'警告!没有数据被更新'3)新建一个带IDENTITY属性列的表,往其中插入数据,使用@@IDENTITY查看标识列信息。CREATETABLE表名(属性列类型IDENTITY(1,1)----定义该列为自增长1的IDENTITY属性列…)INSERTINTO表名(----注意此处不要加IDENTITY属性列)VALUES(----同样的不要加IDENTITY属性列对应值)SECLECT@@IDENTITYcreatetableta(idintidentity(1,1),snamevarchar(10));insertintota(sname)values('chen')select@@identityfromta4)使用IF…ELSE…语句,查询STUDENTS表中学号为800007595的学生,如果学生存在,则输出学生的各科成绩,否则打印查无此人。提示:USESchoolIF(EXISTS(…))BEGIN…ENDELSEPRINT…ifexists(select*fromstudentswheresid='800007595')beginselectscorefromchoiceswheresid='800007595'endelseprint'查无此人'5)使用CASE语句,查询学号为800007595所选择的课程号为10044的成绩,如果为80分或以上,打印优秀,如果在70—80分之间则打印良好,如果在60—70分之间则打印及格,否则打印不及格。selectcasewhenscore=80then'优'whenscore80andscore=60then'及格'whenscore60then'不及格'endfromchoiceswheresid='800007595'andcid='10044'6)存储过程使用T-SQL命令CREATEPROC语句可创建存储过程,基本语法格式如下:CREATEPROC[UDURE]([{@参数数据类型}[=默认值][OUTPUT]][,…n])[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]ASSQL语句[…n]执行已存在的存储过程使用语句格式如下:[EXECUTE]存储过程名[输入参数值]执行创建的存储过程,通过输出参数分析执行结果。函数用户自定义函数分为:标量值函数、内联表值函数、多语句表值函数。创建多语句内联表值函数,要求根据课程名称查询所有选修些课程的学生姓名和分数。提示:CREATEFUNCTION函数名(参数)RETURNS@tb_scoresTABLE(返回表属性)ASBEGININSERT@tb_scoresSELECT…..RETURNEND游标不同于查询语句,查询语句只能参整个结果集进行同一种操作,而游标允许定位在结果集的特定行,从结果集的当前位置检索一行或多行,支持对结果集中当前位置的行进行数据修改,为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持,提供脚本、存储过程和触发器中用于访问结果集中数据的T-SQL语句。使用游标必须按照下面顺序:声明游标,打开游标,读取游标中的数据,关闭游标,释放游标。游标声明:DECLARE游标名[INSENSITIVE][SCROLL]CURSORFORSELECT语句[FOR{READONLY|UPDATE[OF表名列表]}]打开游标:OPEN{{[GLOBAL]游标名}|游标变量名}提取数据:FETCH[[NEXR|PRIOR|FIRSR|LAST|ABSOLUTE{n|@整型变量}|RELATIVE{n|@整型变量}]FROM]{{[GLOBAL]游标名}|@游标变量名}[INTO@变量名列表]关闭游标:CLOSE{{[GLOBAL]游标名}|游标变量名}释放游标:DEALLOCATE{{[GLOBAL]游标名}|游标变量名}实验内容创建一个存储过程,该存储过程实现的功能:查找出选修database课程并且期末成绩为不及格(score60)的学生,现张老师法外开恩,决定给这些不及格但是分数大于45分的同学加上五分平时分,执行存储过程后,要求显示出加完分后,仍然挂科的同学。具体要求:1、显示格式为:课程名/学生姓名/加分前成绩/加分后成绩,要求用函数实现该显示功能;2、加分使用游标实现;3、存储过程输入参数为:课程名,加分数。createfunctionprintInfor(@cnamevarchar(50),@snamevarchar(20),@score_beforeint,@score_afterint)returnsnvarchar(max)asbegindeclare@stringnvarchar(max)set@string=''set@string=@string+rtrim(@cname)+'/'set@string=@string+rtrim(@sname)+'/'set@string=@string+convert(nvarchar,@score_before)+'/'set@string=@string+convert(nvarchar,@score_after)set@string=@string+''return@stringenddropprocaddscorealterprocaddscore(@cnamechar(50),@score_increaseint)asbegindeclarecursor1cursorforselectsname,cname,score,(score+@score_increase)asscore_afterfromstudents,courses,choiceswherestudents.sid=choices.sidandcourses.cid=choices.cidandchoices.score60opencursor1declare@ccnamevarchar(50)declare@snamevarchar(20)declare@score_beforeintdeclare@score_afterintfetchnextfromcursor1into@sname,@ccname,@score_before,@score_afterwhile(@@fetch_status=0)beginupdatechoicessetscore=@score_afterwheresidin(selectsidfromstudentsasswheres.sname=@sname)andcidin(selectcidfromcoursesascwherec.cname=@ccname)if(@score_after60)beginprintdbo.printInfor(@ccname,@sname,@score_before,@score_after)endfetchnextfromcursor1into@sname,@ccname,@score_before,@score_afterendclosecursor1deallocatecursor1endexecaddscore'database',5四心得体会

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功