实验六 存储过程的设计与应用

loading 分享 2026-8-24 下载文档

实验六 存储过程的设计与应用

实验1、[实验场景]:当学期末课程教学结束后,任课老师在考试后要将学生的成绩录入到“教学管理系统”中,在随后的日期中,任课教师还要经常查询自己任教课程班的学生成绩。

请以编码为“T080040401”的课程班为例,用存储过程实现任课教师的课程班成绩查询T-SQL语句。

图一 查询课程班的成绩

解决:

1、创建存储过程 [参考代码]:

表一 创建存储过程CourseClassGradeQuery

USE DB_TeachingMS GO CREATE PROCEDURE CourseClassGradeQuery AS SELECT TG.StuID,StuName,CommonScore,MiddleScore,LastScore,TotalScore FROM TB_Grade TG,TB_Student TS

2、执行(保存)存储过程

3、执行语句:EXEC CourseClassGradeQuery

拓展练习:在上述存储过程中引入一个参数,用来给存储过程传递【课

程班编码】,然后存储过程再根据传递来的【课程班编码】进行相关的学生成绩查询。请写出创建带【课程班编码】参数的存储过程的T-SQL语句。

实验2、[实验场景]:在某个班级新生记录添加的时候,学号不用手工输入,系统将统计出这个班级已有学生的最大学号,然后在其基础上做自动加1处理后插入到学生表中。插入学生记录的流程如图二所示。

1

请以班级编码为“050802”的“05软件(2)班”为例,用存储过程实现学号自增的学生记录插入功能。

1、查询出该班级最大的学号 2、判断是否存在?否新学号设为班级编码+'01' 是3、取出最大学号的后两位流水号,存入变量中 4、将后两位字符型流水 号转变为数值型,加转换为字符型 1后 5、判断字符型长度为1流水号前添加流水号长度? 字符'0'长度为26、将班级编码与新得的 两位流水号进行连接,得到新的学号 7、返回新学号

图二 插入学生记录的流程图

[参考代码]:

CREATE PROCEDURE AutoGetStuID @ClassID CHAR(6),@NewStuID CHAR(8) OUTPUT

AS

DECLARE @MaxStuID CHAR(8),@CharTwoStuID CHAR(2),@IntTwoStuID INT SET @MaxStuID =

(SELECT MAX(StuID) FROM TB_Student WHERE ClassID=@ClassID) IF @MaxStuID IS NULL

SET @NewStuID = @ClassID+'01' ELSE BEGIN

SET @CharTwoStuId = RTRIM(@MaxStuID,7,2)

SET @IntTwoStuID = CONVERT(INT,@CharTwoStuID)+1 SET @CharTwoStuID = CONVERT(CHAR,@IntTwoStuID) IF LEN(@CharTwoStuID) = 1

SET @CharTwoStuID='0'+@CharTwoStuID

2

ELSE

SET @NewStuID = @ClassID+@CharTwoStuID END

保存后,执行:

DECLARE @GetedStuID CHAR(8)

EXEC AutoGetStuID '050801',@GetedStuID OUTPUT SELECT @GetedStuID AS NewStuID

结果如图三所示:

图三 获取学生最大学号结果

实验3、[实验场景]:

课程班成绩录入系统后,由于系统记录的是学生的分数,而有的课程班的成绩需要用“优秀、良好、中等、及格和不及格”五个等第进行显示。等第划分的标准是:90分以上为“优秀”,80-89分为“良好”,70-79分为“中等”,60-69分为“及格”,60分以下为“不及格”。

请用带参数的存储过程实现不同课程班成绩的等第自动划分功能。结果如图四:

图四 课程班成绩的等第自动划分

[参考代码]:

USE DB_TeachingMS GO CREATE PROCEDURE GradeLevelSet @CourseClassID CHAR(10) AS

3

SELECT TG.StuID 学号,StuName 姓名,TotalScore 分数, CASE WHEN TotalScore<60 THEN '不及格' WHEN TotalScore>=60 AND TotalScore<70 THEN '及格' WHEN TotalScore>=70 AND TotalScore<80 THEN '中等' WHEN TotalScore>=80 AND TotalScore<90 THEN '良好' WHEN TotalScore>=90 AND TotalScore<=100 THEN '优秀' END AS '等第' FROM TB_Grade TG,TB_Student TS WHERE TG.StuID=TS.StuID AND CourseClassID=@CourseClassID ORDER BY TotalScore DESC

拓展练习:

如果从表“TB_CourseClass”中查询课程班信息时,要将选满标志【FullFlag】字段中的值“U”和“F”分别显示为“未满”和“已满”,如图五所示:请用简单格式CASE语句实现。

图五 拓展练习

4


实验六 存储过程的设计与应用.doc 将本文的Word文档下载到电脑
搜索更多关于: 实验六 存储过程的设计与应用 的文档
相关推荐
相关阅读