第二篇实验内容及安排
1、定义一个自定义函数,实现从出生年月到年龄的计算。将该用户定义的函数用在查询每个学生的年龄中,给出学生年龄。
create function Sage_func ( @vardate datetime , @curdate datetime ) returns tinyint as begin return datediff ( yy , @vardate , @curdate ) end
select SNO as 学号, SName as 姓名,dbo.Sage_func(Birthday,getdate()) as 年龄 from Student
2、定义一个用户自定义的函数Mark_to_Grade,将成绩从百分制转化为五级记分制。将该用户定义的函数用在查询每个学生的成绩中,给出五级记分制的成绩。 create function Mark_to_Grade( @Scorce int ) returns tinyint as begin return @Scorce/20 end
select SName as 姓名, dbo.grade_func(Scorce) as 五级分制 from Grade,Student where Grade.SNO=Student.SNO
四、实验测验
1、删除学生情况表(student)中相关记录,该记录在学生成绩表中没有相关成绩记录。
2、利用流程控制语句求李艳丽所学课程的平均成绩
3、定义一个自定函数:在添加成绩信息时,利用平时成绩、其中成绩和期末成绩来计算成绩总评。如果没有期中成绩,则平时和期末成绩比重为2:8,如果有期中成绩,则平时、期中、期末三者比重为2:2:6。
在student_course表中添加一列summark平时成绩,而exammark作为期中成绩,mark作为期末成绩;
create trigger get_summark2 on student_course for insert as
Declare @sno varchar(10),@ccno char(10) Declare @nmark int Declare @emark int Declare @fmark int
Select @nmark=NormalMark,@emark=exammark,@fmark=mark,@sno=sno,@ccno=ccno from student_course
if not exists(select exammark from student_course where @sno=sNO and @ccno=ccNO ) begin
update student_course
set sumMark = convert(int,(@nmark * 0.2) + (@fmark * 0.8)) end else begin update student_course
set sumMark = convert(int,(@nmark * 0.2) + (@eMark * 0.2)+ (@fmark * 0.6)) end
-6-
五、实验思考题
1、T-SQL与标准SQL有何异同点? 2、全局变量的主要用处?
-7-