SQLserver数据库实验4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库原理及应用
实验报告
题目:数据库定义实验
专业:网络工程
班级:
学号:
姓名:
2014年12 月9 日
一、实验目的与要求1.掌握触发器的使用。
2.掌握存储过程的创建、修改和删除;掌握存储过程的执行。
二、实验内容
(1)触发器的使用
①在数据表“学生”中创建update触发器,级联更新“选课”表种相应的记录信息。
②利用Delete表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和分析。
(2)存储过程的使用
①在Student数据库中,建立一个存储过程,要求统计计算机系学生的人数,并将人数返回给用户。
②在Student数据库中,建立一个存储过程,要求
统计成绩大于等于90分学生的人数;
统计成绩大于等于80分并且小于90分学生的人数,并将人数返回给用户。
三、解决方案
--①在数据表“学生”中创建update触发器,级联更新“选课”表种相应的记录信息。
create trigger st_update_sc
on student for update
as
declare @bsno char(9),@asno char(9)
select @bsno=sno from deleted
print '更新前的学号:'+@bsno
select @asno=sno from inserted
print '更新后的学号:'+@asno
update sc set sno=@asno where sno=@bsno;
--②利用Delete表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和分析。
--创建备份用的表
create table st_back (
sno char(10) primary key, sname char(10),
ssex char(2) ,
sage smallint,
dno char(3),
);
create trigger st_delete on student
for delete as
declare @sno char(10),@sname char(10) ,@ssex char(2) ,@sage smallint , @dno char(3)
select @sno=sno ,@sname=sname, @ssex=ssex ,@sage=sage,@dno=dno from deleted
print '删除的学号:'+@sno
delete sc where sc.sno=@sno --级联删除sc中的数据
insert into st_back values(@sno,@sname,@ssex,@sage,@dno);
--③在Student数据库中,建立一个存储过程,要求统计计算机系学生的人数,并将人数返回给用户。
create procedure SUM5dept as
select count(*) from student where dno='005'
exec SUM5dept
--○4在Student 数据库中,建立一个存储过程,要求统计成绩大于等于90分学生的人数;
--统计成绩大于等于80分并且小于90分学生的人数,并将人数返回给用户。
create procedure sc_proc as
select count(*) from sc where grade >=90; create procedure sc_proc1 as
select count(*) from sc where grade <90 and grade >=80; exec sc_proc; exec sc_proc1; 四、实验结果
-①在数据表“学生”中创建update 触发器,级联更新“选课”表种相应
的记录信息。
②利用Delete 表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和分析。
③在Student 数据库中,建立一个存储过程,要求统计计算机系学生的人数,并将人数返回给用户。
○4在Student数据库中,建立一个存储过程,要求统计成绩大于等于90分学生的人数;
--统计成绩大于等于80分并且小于90分学生的人数,并将人数返回给用户。
五、出现的问题及解决的方法
1.在级联根系sc表的时候出现了一些问题, 在更新sc的sno的时候由于存在外键越是所以在更新的时候会提示说更改后的键不存在.
解决方法删除外键约束.
alter table sc drop constraint FK__sc__sno__24927208;