2024年6月5日发(作者:)

实验报告

(201 —201 学年 第 学期)

课程名称 数据库原理与应用

实验名称

实验八

存储过程和游标

专 业

年 级

学号 姓名

指导教师

实验日期

实验目的与要求:

掌握存储过程的概念、作用和创建方法

学会在存储过程中使用游标。

实验设备(环境):

PC机、SQL server2008

实验内容:

(1)创建一存储过程,根据学生学号查询某学生选修了的课程的名称及成绩,学号为参数输

入。

(2)创建一存储过程,用来传入的参数:班级号,判断该班级中是否已有学生存在。若有,

存储过程返回1,若没有,存储过程返回0。

(3)展开STUDENT数据库,鼠标单击“存储过程”,选择右边列表中刚刚建立的存储过程名,

双击或右击之,出现属性对话框,可以查看存储过程的定义语句,必要时可进行修改。

(4)试运行存储过程,并验证其语句的正确性。

(5)验证下列程序段的正确性,必要时进行修改,并认真体会游标的使用方法

CREATE PROCEDURE proc_clage

AS

declare @clno char(5);

declare @clage smallint;

declare cur_clage cursor for

while @@fetch_status = 0

begin

fetch next from cur_clage into @clno,@clage;

update class

set clage = @clage

select clno, avg(convert(numeric(5,2), sage)) clage

where clno = @clno;

from student

group by clno;

open cur_clage;

end

close cur_clage;

deallocate cur_clage;

实验程序及结果:

【实验报告内容】

写出各题中各项操作的T-sql语句以及运行结果的截图展示。

(1)

use 教学

go

create procedure grade

@number char(7)

as

select cname ,grade

from course,sc

where = and sno=@number

Go

(2)use 教学

go

create procedure nianji

@cnumber char(12)

as

if ((select sno

from student

where sdept=@cnumber)>0) print '1'

else print '0'

(3)

(4)

execute nianji '13级'

(5)

use [0531]

go

alter table class

add clage2 smallint

use [0531]

go

create procedure proc_clage3

as

declare @clno char(8)

declare @clage smallint

declare cur_clage cursor for

select clno,avg(2016-sbirvear) as clage

from student

group by clno

open cur_clage

while @@FETCH_STATUS = 0

begin

fetch next from cur_clage into @clno,@clage

update Class

set clage = @clage

where Clno = @clno

end

close cur_clage

deallocate cur_clage

use [0531]

go

exec proc_clage1

实验总结(包括过程总结、心得体会及实验改进意见等):

在SQL中创建储存过程时,用户只能在当前数据中创建存储过程,数据库

的拥有者有默认的创建权限,权限也可以转让给其他用户。新建储存过程

的名称必须符合标示符规则,且对于数据库及其所有者必须唯一;用户定

义的存储过程只能在当前数据库中创建,但是临时存储过程通常是在

tempdb数据库中创建的;存储过程最大不能超过128MB;在一条T-SQL语

句中CREATE PROCEDURE不能与其他T-SQL语句一起使用;在修改存储过

程时语句中的参数与CREATE PROCEDURE语句中的参数相同。

指导教师评语:

成绩评定

教师签字

备注:

注:1、报告内的项目或设置,可根据实际情况加以补充和调整

2

、教师批改学生实验报告应在学生提交实验报告10日内