实验十 游标 实验指导

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十游标实验指导

在MS SQL Server中没有描述表中单一记录的表达形式,除非使用where子句限制只有一条记录被选中。所以必须借助于游标来进行面向单条记录的数据处理。游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制,游标允许应用程序对查询语句的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作,它还提供对基于游标位置而对表中数据进行删除或者更新的能力。

游标的主要用途就是在T-SQL脚本程序、存储过程、触发器中对查询语句返回的结果集进行逐行逐字段处理,把一个完整的数据表按行分开,一行一行地逐一提取记录,并从这一记录中逐一提取各项数据,按照需要对相应行进行查询、修改或删除这些记录。

游标主要包含两部分:游标结果集(由定义游标的SELECT语句返回的行的集合)和游标位置(指向这个结果集中的某一行的指针)。

游标的使用步骤:声明游标、打开游标、提取数据、关闭游标、释放游标。

一、声明游标

为游标指定获取数据时的SELECT语句。声明的游标并不会检索任何数据,只是为游标指定SELECT的查询范围。语句格式为:

DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR

FOR select_statement

[ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]

其中:

●cursor_name:所定义的Transact-SQL 服务器游标的名称。cursor_name 必须符合

标识符规则。

●INSENSITIVE:定义一个游标,以创建将由该游标使用的数据的临时复本。对游

标的所有请求都从tempdb中的这一临时表中得到应答;因此,在对该游标进行提

取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。使用

SQL-92 语法时,如果省略INSENSITIVE,则已提交的(任何用户)对基础表的

删除和更新都反映在后面的提取中。

●SCROLL:指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、

ABSOLUTE)均可用。如果未在SQL-92 DECLARE CURSOR 中指定SCROLL,

则NEXT 是唯一支持的提取选项。如果也指定了FAST_FORWARD,则不能指

定SCROLL。

●select_statement:定义游标结果集的标准SELECT 语句。在游标声明的

select_statement 内不允许使用关键字COMPUTE、COMPUTE BY、FOR BROWSE

和INTO。Microsoft 如果select_statement 中的子句与所请求的游标类型的功能

有冲突,则SQL Server 会将游标隐式转换为其他类型。有关详细信息,请参阅使

用隐式游标转换。

●READ ONLY:禁止通过该游标进行更新。在UPDATE或DELETE语句的WHERE

CURRENT OF 子句中不能引用游标。该选项优于要更新的游标的默认功能。

●UPDATE [OF column_name [,...n]]:定义游标中可更新的列。如果指定了OF

column_name [,...n],则只允许修改列出的列。如果指定了UPDATE,但未指定列

的列表,则可以更新所有列。

二、打开游标

在使用游标提取数据之前,需要先将游标打开。语句格式为:

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

其中:

●GLOBAL :指定cursor_name 是指全局游标。

●cursor_name:已声明的游标的名称。如果全局游标和局部游标都使用cursor_name

作为其名称,那么如果指定了GLOBAL,则cursor_name 指的是全局游标;否则

cursor_name 指的是局部游标。

●cursor_variable_name:游标变量的名称,该变量引用一个游标。

打开游标语句执行游标定义中的查询语句,查询结果放在游标缓冲区中。查询结果的内容取决于查询语句的设置和查询条件。游标在打开状态下,不能再被打开。打开一个游标后,可以使用全局变量@@error判断打开操作是否成功,如果返回值为0,表示游标打开成功,否则表示打开失败。当游标被成功打开时,游标位置指向游标区中的第一个元组,游标打开后,全局变量@@error_rows返回游标记录数。

三、提取数据

游标被成功打开以后,就可以使用FETCH命令从中检索特定的数据,语句格式为:

FETCH

[ [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE { n | @nvar } | RELATIVE { n |

@nvar } ] FROM ]

{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }

[ INTO @variable_name [ ,...n ] ]

其中:

●NEXT:紧跟当前行返回结果行,并且当前行递增为返回行。如果FETCH NEXT 为

对游标的第一次提取操作,则返回结果集中的第一行。NEXT 为默认的游标提取

选项。

●PRIOR:返回紧邻当前行前面的结果行,并且当前行递减为返回行。如果FETCH

PRIOR 为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。

●FIRST:返回游标中的第一行并将其作为当前行。

●LAST:返回游标中的最后一行并将其作为当前行。

●ABSOLUTE { n | @nvar}:如果n 或@nvar 为正数,则返回从游标头开始的第n

相关文档
最新文档