(2版)数据库实验9 T-SQL程序设计 下载本文

第二篇实验内容及安排

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-