SQL Server 2008数据库及应用单元13 创建与使用游标

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大型数据库
单元13 创建与使用游标
学 习 目 标
【知识目标】 理解游标的基本概念。 掌握服务器游标的创建和使用 步骤方法。 掌握游标与其他Transcact-SQL 配合使用的方法。
【技能目标】 会根据需要创建和使用游标。 会在存储过程中使用游标。
大型数据库(SQL Server) 单元13 创建与使用游标
大型数据库(SQL Server) 单元13 创建与使用游标
10


使用游标遍历Course表,输出报 名人数最多的课程的信息(课程 编号、课程名称、报名人数)
使用游标遍历Course表,输出总 报名人数最多的课程类的信息 (课程类别、该类课程的总报名 人数)
练 一 练

大型数据库(SQL Server) 单元13 创建与使用游标
游 标 概 述
使用游标对查询结果集可进行逐行处理: 1、在结果集中定位特定的数据行 2、对结果集中游标位置的数据行进行处理 (显示、更新、删除)

SQL Server支持两种类型的游标 : (1)Transcact-SQL服务器游标 (2)数据库应用程序编程接口(API)游标 函数。
本书只介绍T-SQL服务器游标。
将 值 存 入 变 量
说明:NEXT|PRIOR|FIRST|LAST见239 页说明。默认为NEXT;其它的则 需要将游标声明为SCROLL。

【问题13.2】使用FETCH将值存入 变量。
大型数据库(SQL Server) 单元13 创建与使用游标
9
使 用

全局变量@@FETCH_STATUS返回 FETCH成功与否,其值为int:
11

游 标 配 合 存 储 过 程 使 用
在实际应用中,通常配合存储过 程使用游标,游标特别适合需遍 历表这样的处理过程。如果能合 理地将客户端循环处理表的代码 转换为存储过程并使用游标来处 理,将大大提高数据的处理速度。
【问题】:改写【问题13.3】程 序为带有游标的存储过程。
大型数据库(SQL Server) 单元13 创建与使用游标
3
引 例
前面使用SELECT语句查询返回的是全部 满足条件的数据行。 思考:如果要求每次只显示查询结果集 中的一行,该如何处理?——这在将TSQL嵌入到其它高级语言(如C、VC、 Delphi等)的编程中经常用到。
大型数据库(SQL Server) 单元13 创建与使用游标
4

游标:由查询结果集和游标位置(可以 理解为指向当前数据行的指针)所构成。

【问题13.4】在选课系统中由 于对每门课的上课人数进行限制, 而对报名人数没有进行限制,所 以在Course表中会出现报名人数 超过选课人数的情况,此时需要 系统采取计算机随机抽取的方式 公布选课结果。
大型数据库(SQL Server) 单元13 创建与使用游标
14
单 元 小 结
游标特别适合需逐行处理数据的 过程。 如何使用游标,如何在存储过程 中应用游标。 能合理的将客户端循环处理表的 代码转换为存储过程,并用游标 来处理将有效提高数据的处理速 度和降低网络流量。
2

任 务 概 述
小李查看学生选课数据库中的信 息后,现在提出希望逐行显示查 询结果,并希望将查询结果能保 存在变量中,以便使用程序进行 其它的处理。 在学生选课数据库Xk中声明游标、 打开游标、读取游标位置的数据、 关闭游标及释放游标。

大型数据库(SQL Server) 单元13 创建与使用游标
大型数据库(SQL Server) 单元13 创建与使用游标
8
创 建 游 标

使 用 FETCH

如果需要判断FETCH数据行中的某列 数据如课程号是否为所需要的值, 就需要将FETCH到的数据行保存到变 量中,且在FETCH之前须先声明这些 变量。 FETCH到变量的格式:
FETCH [NEXT|PRIOR|FIRST|LAST] FROM cursor INTO @variable_name, …
T-SQL
大型数据库(SQL Server) 单元13 创建与使用游标
6

声明游标
DECLARE cursor_name CURSOR [FORWORD_ONLY|SCROLL] FOR select_statements [FOR {READ ONLY|UPDATE}]
相 关 语 句


打开游标

大型数据库(SQL Server) 单元13 创建与使用游标
15

独自完成课本page246实训
复 习 与 巩 固
大型数据库(SQL Server) 单元13 创建与使用游标
16
USE Xk GO DECLARE CrsCourse CURSOR FOR SELECT * FROM Course ORDER BY CouNo GO OPEN CrsCourse FETCH NEXT FROM CrsCourse --001的课程 FETCH NEXT FROM CrsCourse --002的课程 UPDATE Course SET LimitNum=22 WHERE CURRENT OF CrsCourse --修改当前数据行002的课程 DELETE FROM Course WHERE CURRENT OF CrsCourse --删除当前数据行002的课程 CLOSE CrsCourse DEALLOCATE CrsCourse
0:FETCH语句成功 -1:FETCH语句失败或此行不在结果集中 -2:被提取的行不存在
@@FETCH_STATUS 的 游 标

【问题13.3】编写程序,使用游标 逐行显示查询结果集(遍历)的每 一行,使用@@FETCH_STATUS作 为循环控制变量。
小结:游标适用于需要遍历结果集 这样的处理过程。它允许对结果集 中的每一行执行不同的操作,而不 是整个结果集执行同一操作的情况。
12

游 标 配 合 存 储 过 程 使 用
【问题】创建带有游标的存储过 程,更新Course表中每门课程的 报名人数(WillNum) 【思考】该存储过程的功能是更 新报名人数,为何声明的游标却 是只读的?

大型数据库(SQL Server) 单元13 创建与使用游标
13
游 标 的 综 合 应 用 ( 可 选 )
大型数据库(SQL Server) 单元13 创建与使用游标
5
服 务 器 游 标
使用游标的步骤: 声明游标 打开游标 读取游标位置的数据 修改或删除游标位置的数据—可以和 其他T-SQL语句配合灵活使用 关闭游标(与打开游标配对) 释放游标(与声明游标配对,此时释 放分配给游标的所有资源)
OPEN cursor_name
读取游标位置数据
FETCH [NEXT|PRIOR|FIRST|LAST] FROM cursor
Hale Waihona Puke Baidu

关闭游标
CLOSE cursor_name
删除游标
DEALLOCATE cursor_name
大型数据库(SQL Server) 单元13 创建与使用游标
7
【问题13.1】声明一个名为CrsCourse的游标, 该游标从Course表中查询所有数据行并逐 行显示;将课程编号为‘002’的数据行的 限选人数修改为22。
相关文档
最新文档