当前位置: 首页 > news >正文

实验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 课程信息表

相关文章:

  • 使用ansible命令部署k8s集群
  • 独立完成软件的功能的测试(3)
  • 界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(下)
  • 【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备
  • CMakeLists.txt与package.xml依赖项比较
  • 概率论之 证明 正态分布的上a 分位点的对称的性质
  • 网络安全——基于Snort的入侵检测实验
  • Spring boot注解
  • YOLOv8改进 | 2023主干篇 | 利用RT-DETR特征提取网络PPHGNetV2改进YOLOv8(超级轻量化精度更高)
  • SpringBoot系列之基于Jedis实现分布式锁
  • 基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(二)
  • class类实现operator==重载
  • 【LeetCode】28. 找出字符串中第一个匹配项的下标 【字符串单模匹配:KMP算法】
  • 【Hadoop_04】HDFS的API操作与读写流程
  • 《地理信息系统原理》笔记/期末复习资料(10. 空间数据挖掘与空间决策支持系统)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 2018一半小结一波
  • Github访问慢解决办法
  • If…else
  • Iterator 和 for...of 循环
  • jQuery(一)
  • Laravel 菜鸟晋级之路
  • Laravel5.4 Queues队列学习
  • mongo索引构建
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PAT A1017 优先队列
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Twitter赢在开放,三年创造奇迹
  • 初识 beanstalkd
  • 开源SQL-on-Hadoop系统一览
  • 使用API自动生成工具优化前端工作流
  • 一些关于Rust在2019年的思考
  • 自动记录MySQL慢查询快照脚本
  • 7行Python代码的人脸识别
  • #include
  • (09)Hive——CTE 公共表达式
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C#)一个最简单的链表类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (篇九)MySQL常用内置函数
  • (四) 虚拟摄像头vivi体验
  • (转)Scala的“=”符号简介
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)Linux 多线程条件变量同步
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • /3GB和/USERVA开关
  • /run/containerd/containerd.sock connect: connection refused
  • @EnableConfigurationProperties注解使用
  • @javax.ws.rs Webservice注解