实验8:游标和存储过程

【实验目的】

1、了解游标、存储过程的作用

2、熟悉游标和存储过程的特点

3、掌握游标的使用步骤和存储过程的创建和管理

实验设备及器材

1、硬件:PC机;

2、软件:(1)Windows7; (2)Microsoft SQL Server 2012

【主要内容】

游标的使用步骤;当前游标集的修改;存储过程的创建和管理。

实验内容及要求/【实验步骤及结果】

下面所有的操作在“学生管理数据库”中进行。(附加数据库,T-SQL语句)

一、存储过程操作

1.设计简单存储过程AVG_GRADE,求出计算机原理这门课程的平均成绩;并执行验证。

USE 学生管理数据库

GO

CREATE PROCEDURE AVG_GRADE

AS

SELECT 成绩信息表.课程号,Round (AVG(成绩信息表.成绩),1) 

AS '平均成绩'

FROM 学生信息表 join 成绩信息表 ON 学生信息表.学号=成绩信息表.学号 join 课程信息表 ON 课程信息表.课程号=成绩信息表.课程号 and 课程信息表.课程名='计算机原理'

GROUP BY  成绩信息表.课程号

EXEC  AVG_GRADE

2.设计存储过程S_C_SC,求出某课程的考试学生姓名和成绩;并执行验证。(请注意:请考虑是否已经存在该存储过程的情况,如果已有该存储过程,请先删除,再创建)

USE 学生管理数据库

GO

IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE NAME='S_C_SC' AND TYPE='P')

  DROP PROCEDURE S_C_SC

GO

CREATE PROCEDURE S_C_SC

  @course varchar(50)

AS

  SELECT 课程信息表.课程名,学生信息表.姓名,成绩信息表.成绩

  FROM 学生信息表 JOIN 成绩信息表  ON 学生信息表.学号=成绩信息表.学号

       JOIN 课程信息表  ON 成绩信息表.课程号=课程信息表.课程号 AND 课程名=@course

GO

EXEC S_C_SC '计算机原理'

  1. 修改2建立的存储过程,求出某课程的考试人数和平均分;并执行验证。

USE 学生管理数据库

GO

ALTER PROCEDURE S_C_SC

  @course varchar(50)

AS

  SELECT AVG(成绩信息表.成绩) AS 平均分,COUNT( @course) AS 人数

  FROM 课程信息表  JOIN 成绩信息表  ON 课程信息表.课程号=成绩信息表.课程号 AND 课程名=@course

GO

EXEC S_C_SC '计算机原理'

4.建立存储过程SNAME_S,查询出所有姓名中有军字的同学的学号、姓名、性别和专业;并执行验证。

USE 学生管理数据库

GO

CREATE PROCEDURE SNAME_S

@course varchar(50)

AS

  SELECT 学生信息表.学号,学生信息表.姓名,学生信息表.性别,学生信息表.专业

  FROM 学生信息表

  WHERE 学生信息表.姓名 like @course

GO 

EXEC SNAME_S '%军%';

5.建立存储过程I_II,利用输出参数计算阶乘;并执行验证。

USE 学生管理数据库

GO

CREATE PROCEDURE I_II

  @SUM_I INT,

  @SUM_II FLOAT OUTPUT

AS

  DECLARE @X int,@Y float

  SET @X=1

  SET @Y=1

  WHILE @X<=@SUM_I

  BEGIN

    SET @Y=@Y*@X

    SET @X=@X+1

  END

  SET  @SUM_II=@Y

GO

DECLARE @OUTPUT FLOAT

EXEC I_II 5,@OUTPUT OUTPUT

PRINT STR(@OUTPUT)

二、游标操作

1.使用游标逐行提取学生信息表的记录。

USE 学生管理数据库

GO

DECLARE SUM_I CURSOR

FOR 

  SELECT * FROM 学生信息表

OPEN SUM_I

FETCH NEXT FROM SUM_I

WHILE @@FETCH_STATUS=0

    FETCH NEXT FROM SUM_I

CLOSE SUM_I

DEALLOCATE SUM_I

  1. 使用游标更改学生信息表的第2行的姓名,姓名随意改;并查询表验证。

USE 学生管理数据库

GO

DECLARE SUM_I SCROLL CURSOR

FOR 

  SELECT * FROM 学生信息表

OPEN SUM_I

FETCH ABSOLUTE 2 FROM SUM_I

UPDATE 学生信息表

SET 姓名='刘雄狄'

WHERE CURRENT OF SUM_I

CLOSE SUM_I

DEALLOCATE SUM_I

GO

SELECT * FROM 学生信息表

3. 创建一个课程信息表的临时表,删除该表的第3行记录;并查询表验证。

USE 学生管理数据库

GO

IF OBJECT_ID('tempdb..#课程临时表') is not null 

  DROP TABLE #课程临时表

SELECT * INTO #课程临时表 FROM 课程信息表

SELECT * FROM #课程临时表

SELECT * FROM 课程信息表

GO

DECLARE SUM_I INSENSITIVE SCROLL CURSOR

FOR 

  SELECT 课程号 FROM 课程信息表

OPEN SUM_I

FETCH ABSOLUTE 3 FROM SUM_I

DECLARE @course varchar(50)

FETCH ABSOLUTE 3 FROM SUM_I INTO @course

PRINT @course

DELETE FROM #课程临时表

WHERE 课程号=@course

CLOSE SUM_I

DEALLOCATE SUM_I

GO

SELECT * FROM #课程临时表

SELECT * FROM 课程信息表

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空心木偶☜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值