广东金融学院实验报告
课程名称:数据库原理与应用
实验编号 及实验名称 姓 名 实验地点 指导教师 实验三 数据库高级应用实验 系 别 8 学 号 实验日期 同组其他成员 班 级 实验时数 成 绩 年 月 日 无 一、实验目的及要求 1、 掌握SQL Server存储过程的定义和使用。 2、 掌握SQL Server触发器的定义和使用。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 1、计算机操作系统要求在windows XP以上。 2、并要求SQL Server 软件2000以后版本。 三、实验内容及要求 利用实验指导书中的关系数据库完成下面题目: 1、说明下面代码段的功能 SELECT tname as ‘姓名’,tSex as ‘性别’, case trank else end from teacher 创建一个有教师姓名、性别、职称的存储过程。其中将级别为“教授”的教师职称显示为“高级职称”; 将级别为“讲师”的教师职称显示为“中级职称”;剩余级别的教师职称显示为“初级职称”。 when ‘教授’ then ‘高级职称’ when ‘讲师’ then ‘中级职称’ ‘初级职称’ 2、完成下面代码的书写 计算student_course表的平时分数列的平均值。如果小于80,则分数增加其值的5%;如果分数的最高值超过95,则终止该操作。在以下代码划线处填入适当的内容以完成上述功能。 WHILE (SELECT_AVG_(NormalMark) FROM student_course)<80 第 1 页 共2 页
BEGIN UPDATE student_course SET NormalMark = NormalMark *1.05 if (SELECT MAX(NormalMark) FROM student_course)>__95____ BREAK ELSE _CONTINUE____ END 注意:实验前要先给所有同学的NormalMark赋一个初值,比如50。 3、根据要求完成下列题目 1) 编写一个触发器:在添加期末成绩成绩信息时,利用平时成绩、其中成绩和期末成绩来计算成绩总评。如果没有期中成绩,则平时和期末成绩比重为2:8,如果有期中成绩,则平时、期中、期末三者比重为2:2:6。 alter table student_course add midmark int go update student_course set midmark=mark-2 go CREATE TRIGGER trig_student_course ON student_course FOR insert,update AS begin declare @nMark int,@eMark int,@mMark int declare @sno varchar(10),@ccno char(10) select @nmark=normalmark,@emark=exammark,@mMark=midmark,@sno=sno,@ccno=ccno if @mMark>0 from inserted update student_course set mark=@nmark*0.2+@mMark*0.2+@emark*0.6 where sno= @sno and ccno=@ccno else update student_course set mark=@nmark*0.2+@emark*0.8 where sno= @sno and ccno=@ccno end 2)创建一个带输入参数和输出参数的存储过程,要求实现如下功能:输入学生学号,然后输出学生的选课门数、平均分以及所选学分。 CREATE PROC show_course_Mark ( @sno char(9), 第 2 页 共2 页
@sc_Count int output, @avgMark float output, @credit int output ) AS begin select @sc_Count=count(*),@avgMark=avg(mark) from student_course sc where sc.sno=@sno from student_course sc,course_class cc where sc.ccno=cc.ccno and sc.sno=@sno select @credit=sum(credit) end 3)调用2小题中的存储过程,并分别获得输出相关信息。 declare @sccount int declare @avgMark float declare @credits float EXEC show_course_Mark '081710106',@sccount output,@avgMark output,@credits output select '081710106' as '学号',@sccount as '选课门数',@avgMark as '平均分',@credits as '所选学分' 4、思考题 1)存储过程和触发器的异同点? 第 3 页 共2 页