数据库实验六 存储过程.docx
- 文档编号:23545741
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:16
- 大小:381.62KB
数据库实验六 存储过程.docx
《数据库实验六 存储过程.docx》由会员分享,可在线阅读,更多相关《数据库实验六 存储过程.docx(16页珍藏版)》请在冰豆网上搜索。
数据库实验六存储过程
实验六存储过程
一、实验目的
(1)掌握T-SQL流控制语句。
(2)掌握创建存储过程的方法。
(3)掌握存储过程的执行方法。
(4)掌握存储过程的管理和维护。
二、实验内容
1、创建简单存储过程
(1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。
要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!
”信息,否则就给出“不存在,可创建!
”的信息。
ifexists(selectnamefromsysobjectswherename='stu_pr'andtype='p')
begin
print'已删除!
'
dropprocedurestu_pr
end
else
print'不存在,可创建!
'
go
createprocedurestu_pr
as
select*
fromStudent_20103322leftouterjoinSC_20103322
on(Student_20103322.Sno=SC_20103322.Sno)leftouterjoinCourse_20103322
on(Course_20103322.Cno=SC_20103322.Cno)
whereclassno='051'
execstu_pr
2、创建带参数的存储过程
(1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。
系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。
执行该存储过程,用多种参数加以测试。
ifexists(selectnamefromsysobjectswherename='stu_proc1'andtype='p')
begin
print'已删除!
'
dropprocedurestu_proc1
end
else
print'不存在,可创建!
'
go
createprocedurestu_proc1
@Sdeptchar(8)='%',@Snamevarchar(8)='林%'
as
selectSdept,Student_20103322.Sno,Sname,DATEDIFF(YEAR,Birth,GETDATE())age,Cname,Grade
fromStudent_20103322,SC_20103322,Course_20103322
whereStudent_20103322.Sno=SC_20103322.Sno
andCourse_20103322.Cno=SC_20103322.Cno
andSdeptlike@Sdept
andSnamelike@Sname
executestu_proc1'计算机系','林红'
executestu_proc1'信息安全','胡光璟'
(2)创建一个名为Student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成绩。
(学号起始号与终止号在调用时输入,可设默认值)。
执行该存储过程。
ifexists(selectnamefromsysobjectswherename='Student_sc'andtype='p')
begin
print'已删除!
'
dropprocedurestudent_sc
end
else
print'不存在,可创建!
'
go
createprocedureStudent_sc
@Sno1char(8),@Sno2char(8)
as
selectStudent_20103322.Sno,Sname,SUM(Grade)总成绩
fromStudent_20103322,SC_20103322,Course_20103322
whereStudent_20103322.Sno=SC_20103322.Sno
andCourse_20103322.Cno=SC_20103322.Cno
andStudent_20103322.Sno>=@Sno1
andStudent_20103322.Sno<=@Sno2
groupbyStudent_20103322.Sno,Sname
executeStudent_sc'20110000','20110003'
3、创建带输出参数的存储过程
(1)创建一个名为Course_sum的存储过程,可查询某门课程考试的总成绩。
总成绩可以输出,以便进一步调用。
ifexists(selectnamefromsysobjectswherename='Course_sum'andtype='p')
begin
print'已删除!
'
dropprocedureCourse_sum
end
else
print'不存在,可创建!
'
go
createprocedureCourse_sum
@Cnamevarchar(20),@sumintoutput
as
select@sum=sum(Grade)
fromSC_20103322,Course_20103322
whereCourse_20103322.Cno=SC_20103322.Cno
andCname=@Cname
groupbySC_20103322.Cno,Cname
declare@pingint
execCourse_sum'高数',@pingoutput
print'高数的考试总成绩为:
'+cast(@pingasvarchar(20))
(2)创建一执行该存储过程的批处理,要求当总成绩小于100时,显示信息为:
“XX课程的总成绩为:
XX,其总分未达100分”。
超过100时,显示信息为:
“XX课程的总成绩为:
XX”。
declare@sumint
declare@Cnamevarchar(20)
ExecCourse_sum@cname,@sumout
begin
if@sum<100
printcast(@cnameasvarchar)+'课程的总成绩为:
'+cast(@sumasvarchar)+',其总分未达分'
else
printcast(@cnameasvarchar)+'课程的总成绩为:
'+cast(@sumasvarchar)
end
declare@sumint
declare@Cnamevarchar(20)
set@Cname='高数'
ExecCourse_sum@cname,@sumout
begin
if@sum<100
printcast(@cnameasvarchar)+'课程的总成绩为:
'+cast(@sumasvarchar)+',其总分未达分'
else
printcast(@cnameasvarchar)+'课程的总成绩为:
'+cast(@sumasvarchar)
end
4、创建带重编译及加密选项的存储过程
创建一个名为update_sc、并带重编译及加密选项的存储过程,可更新指定学号、指定课程号的学生的课程成绩。
(学号、课程号由调用时输入)
ifexists(selectnamefromsysobjectswherename='update_sc'andtype='p')
begin
print'已删除!
'
dropprocedureupdate_sc
end
else
print'不存在,可创建!
'
go
createprocedureupdate_sc
@snochar(8),@cnochar(3),@gradetinyint
withRECOMPILE,ENCRYPTION
as
updateSC_20103322
setGrade=@grade
whereSno=@snoandCno=@cno
declare@snochar(8),@cnochar(3),@gradetinyint
set@sno='20103322'
set@cno='003'
set@grade='100'
execupdate_sc@sno,@cno,@grade
begin
printcast(@snoasvarchar)+'的'+cast(@cnoasvarchar)+'课程成绩为:
'+cast(@gradeasvarchar)
end
5、使用T-SQL语句管理和维护存储过程
(1)使用sp_helptext查看存储过程Student_sc的定义脚本
execsp_helptextstudent_sc
(2)使用select语句查看Student_sc存储过程的定义脚本(提示:
通过查询表sysobjects和表syscomments)
select*
fromsysobjects,syscomments
wherename='Student_sc'
(3)将存储过程stu_pr改为查询学号为2011001的学生的详细资料。
alterprocedurestu_pr
as
select*
fromStudent_20103322leftouterjoinSC_20103322
on(Student_20103322.Sno=SC_20103322.Sno)leftouterjoinCourse_20103322
on(Course_20103322.Cno=SC_20103322.Cno)
whereStudent_20103322.Sno='2011001'
(4)删除存储过程stu_pr。
dropprocedurestu_pr
6、使用SQLServerManagementStudio管理存储过程
(1)在SQLServerManagementStudio中重新创建刚删除的存储过程stu_pr
createprocedurestu_pr
as
begin
select*
fromStudent_20103322leftouterjoinSC_20103322
on(Student_20103322.Sno=SC_20103322.Sno)leftouterjoinCourse_20103322
on(Course_20103322.Cno=SC_20103322.Cno)
whereStudent_20103322.Sno='2011001'
end
(2)查看存储过程stu_pr,并将该过程修改为查询051班女生的所有资料。
ALTERprocedure[dbo].[stu_pr]
as
begin
select*
fromStudent_20103322leftouterjoinSC_20103322
on(Student_20103322.Sno=SC_20103322.Sno)leftouterjoinCourse_20103322
on(Course_20103322.Cno=SC_20103322.Cno)
whereStudent_20103322.Sno='2011001'
andSex='女'
end
(3)删除存储过程stu_pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库实验六 存储过程 数据库 实验 存储 过程