SQLServer实验三分解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七

(1)创建并运行存储过程student_grade,要求实现如下功能:查询studb数据库中每个学生各门课的成绩,其中包括每个学生的sno、sname、cname和score。

create procedure student_grade

as

select student.sno,student.sname,ame,student_course.score from student join student_course on student.sno=student_course.sno join course on o=student_o

运行结果代码:

use Studb

go

execute student_grade

go

(2)创建并运行名为proc_exp的存储过程,要求实现如下功能:从student_course表中查询某一学生考试的平均成绩。

create procedure proc_exp

@sname varchar(8)

as

begin

select sname,AVG(score)

from student join student_course on student.sno=student_course.sno where sname=@sname

group by sname

end

运行结果代码:

use Studb

go

execute proc_exp@sname='刘招香'

go

(3)修改存储过程proc_exp,要求实现如下功能:输入学生学号,根据该学生所选课程的平均成绩给出提示信息,即如果平均成绩在60分以上,显示“成绩合格,成绩为XX分”,否则显示“成绩不合格,成绩为XX分”;然后调用存储过程proc_exp,输入学号0705010131,显示成绩是否合格。

alter procedure proc_exp

@student_sno varchar (20)

as

declare@avg varchar(20)

set@avg=(select AVG(score)

from student_course

where sno=@student_sno)

if@avg>=60 print'成绩合格,成绩为'+@avg+'分'

else print'成绩不合格,成绩为'+@avg+'分'

运行结果代码:

use Studb

go

declare@student_sno varchar (20)

select@student_sno='0705010131'

exec proc_exp@student_sno

(4)创建名为proc_add的存储过程,要求实现以下功能:向student_course表中添加学生记录;然后调用存储过程proc_add,向student_course表中添加学生成绩记录。create procedure proc_add

@sno char(10),

@cno char(10),

@score tinyint

as

begin

set nocount on

if not exists

(select*from student_course where sno=@sno

and cno=@cno and score=@score) insert into student_course(sno,cno,score) values(@sno,@cno,@score)

end

运行结果代码:

use studb

go

exec proc_add'0705010102','0208','80'

go

执行前:

执行后:

(5)删除存储过程proc_exp和proc_add

IF OBJECT_ID('proc_exp')IS NOT NULL

DROP PROCEDURE proc_exp

IF OBJECT_ID('proc_add')IS NOT NULL

DROP PROCEDURE proc_add

实验八

(1)创建触发器student_trg,当删除student表中的数据时,同时删除student_course表中相同的数据;然后通过删除student表中的某个学生记录来验证该触发器。

create trigger student_trg

on student

after delete

as

begin

delete

from student_course

where sno IN(

select sno

from deleted

)

end

运行结果代码:

DELETE FROM student

WHERE sno='0705010303'

(2)修改触发器student_trg,当更新student表中sno的值时,同时更新student_course表中相同的sno的值;然后通过修改student表中的某个学生的学号(sno)来验证该触发器

ALTER TRIGGER student_trg

ON student AFTER UPDATE

AS

BEGIN

IF UPDATE(sno)

UPDATE student_course

SET sno=(SELECT sno FROM inserted)

WHERE sno IN(SELECT sno FROM DELETED)

END

运行结果代码:

UPDATE student

SET sno='0705010217'

WHERE sno='0705010215'

相关文档
最新文档