实验内容:
- 创建一个存储过程,查看001号课程的选修情况,包括学生学号、姓名和成绩,然后执行该过程;
- 创建一个存储过程,通过学生学号来查询学生选修情况,包括学生学号、姓名和成绩,然后执行该过程;
- 创建一个存储过程,通过学生学号来查询学生选修情况,默认查询学号为00001的选修情况,包括学生学号、姓名和成绩,然后执行该过程;
- 创建一个存储过程,获得选修某门课程的总人数,然后再执行该过程后把总人数显示出来;
- 创建一个存储过程,通过学号和课程号进行成绩查询,如果查询结果为空,则显示“该学生没有选这门课”,返回0,如果查询结果低于60分,则显示“该学生考试成绩不及格”,返回1,如果查询结果在60-85之间,则显示“该学生考试成绩为良”,返回2,如果查询结果大于85,则显示“该学生考试成绩为优秀”,返回3;然后执行该过程查询学号00001的选课成绩,并把返回结果显示出来;
- 通过对象资源管理器创建问题5的存储过程,创建成功后使用T-SQL执行该过程查询学号00001的选课成绩,并把返回结果显示出来;
- 设计存储过程,完成对SC表的元组插入工作。要求使用输入参数。插入操作成功返出状态值0,失败返出状态值-1。执行存储过程,如果返回状态值为0,输出“数据插入成功”,否则输出“数据插入失败”(使用@@error来判断是否成功);
- 创建一个名为student01的存储过程,该存储过程能查询出系号为01学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息(提示:使用sysobjects来查询该存储过程是否存在);
9. 讨论存储过程和自定义函数的区别。
源代码:
1.创建一个存储过程,查看001号课程的选修情况,包括学生学号、姓名和成绩,然后执行该过程;
create procedure q1
as
select Student.SNo,SName,score
from Student join sc on
Student.SNo = sc.SNo
where CNo = '001'
go
execute q1
2.创建一个存储过程,通过学生学号来查询学生选修情况,包括学生学号、姓名和成绩,然后执行该过程
go
create procedure q2 @cnumber char(5)
as
select Student.SNo,SName,score
from Student join sc on
Student.SNo = sc.SNo
where Student.SNo=@cnumber
go
execute q2 '00001'
3.创建一个存储过程,通过学生学号来查询学生选修情况,默认查询学号为00001的选修情况,包括学生学号、姓名和成绩,然后执行该过程;
go
create procedure q3 @cnumber char(5)='00001'
as
select Student.SNo,SName,score
from Student join sc on
Student.SNo = sc.SNo
where Student.SNo=@cnumber
go
execute q3 '00002'
execute q3
4.创建一个存储过程,获得选修某门课程的总人数,然后再执行该过程后把总人数显示出来;
go
create procedure q4 @cnumber char(5),@ccount int output
as
select @ccount=count(*)
from sc
where cno=@cnumber
go
declare @ccount int
execute q4 '002',@ccount output
select @ccount
5.创建一个存储过程,通过学号和课程号进行成绩查询,如果查询结果为空,则显示“该学生没有选这门课”,返回0,如果查询结果低于60分,则显示“该学生考试成绩不及格”,返回1,如果查询结果在60-85之间,则显示“该学生考试成绩为良”,返回2,如果查询结果大于85,则显示“该学生考试成绩为优秀”,返回3;然后执行该过程查询学号00001的选课成绩,并把返回结果显示出来;
go
create procedure q5 @sno char(5),@cno char(3)
as
declare @a int
select @a=score
from sc
where cno=@cno and sno=@sno
if @a=null
begin print '该学生没有选这门课'
return 0
end
else if @a<60
begin print '该学生考试成绩不及格'
return 1
end
else if @a < 85
begin print '该学生考试成绩为良'
return 2
end
else
begin print '该学生考试成绩为优'
return 3
end
go
declare @结果 int
exec @结果=q5'00001','001'
print @结果
6.通过对象资源管理器创建问题5的存储过程,创建成功后使用T-SQL执行该过程查询学号00001的选课成绩,并把返回结果显示出来;
go
declare @结果2 int
exec @结果2 = q5 '00001','005'
print @结果2
7.设计存储过程,完成对SC表的元组插入工作。要求使用输入参数。插入操作成功返出状态值0,失败返出状态值-1。执行存储过程,如果返回状态值为0,输出“数据插入成功”,否则输出“数据插入失败”(使用@@error来判断是否成功);
go
create procedure q7 @sno char(5),@cno char(5),@score int
as
insert into sc
values (@sno , @cno , @score)
if @@error <> 0
return -1
else
return 0
go
declare @b int
execute @b=q7 '00031','001','90'
if @b =0
print '数据插入成功'
else
print'数据插入失败'
execute @b = q7 '00030', '004', 90
if @b = 0
print '数据插入成功'
else
print '数据插入失败'
8.创建一个名为student01的存储过程,该存储过程能查询出系号为01学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息(提示:使用sysobjects来查询该存储过程是否存在);
if exists(select * from sysobjects where type = 'C' and name='student01')
begin
drop procedure student01
print '已删除!'
end
else
print '不存在,可创建!'