第8章游标详解.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 游标;一般情况,Select语句查询的结果都是多条记录,而应用程序一般一次只能处理一条记录,因此需要用游标机制将多条记录一次一条送至宿主程序处理,从而把对集合的操作转换为对单个记录的处理。 Transact-SQL游标主要用在存储过程、触发器等中。;游标包括以下两个部分: 游标结果集 定义该游标的SELECT语句返回的行的集合。 游标位置 指向这个集合中某一行的指针。;游标的组成及其概念如图所示:;游标使得SQL Server语言可以逐行处理结果集中的数据,游标具有以下优点: 允许定位在结果集的特定行。 从结果集的当前位置检索一行或多行。 支持对结果集中当前位置的行进行数据修改。 为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。 提供脚本、存储过程和触发器中使用的访问结果集中的数据的Transact-SQL语句。;使用游标的典型过程: 第1步:声明Transact-SQL变量包含游标返回的数据。为每一结果集列声明一个变量。以保存由列返回的值。 第2步:使用DECLARE CURSOR语句把Transact-SQL游标与一个SELECT语句相关联。DECLARE CURSOR语句同时定义游标的特征,如游标名称以及游标是否为只读或只进特性。;第3步:使用OPEN语句执行SELECT语句并生成游标。 第4步:使用FETCH INTO语句提取单个行,并把每列中的数据转移到指定的变量中。然后,其他Transact-SQL语句可以引用这些变量来访问已提取的数据值。Transact-SQL不支持提取行块。;第5步:结束游标时,使用CLOSE语句。关闭游标可以释放某些资源,比如游标结果集和对当前行的锁定。但是如果重新发出一个OPEN语句,则该游标结构仍可用于处理。 使用DEALLOCATE语句则完全释放分配给游标的资源,包括游标名称。在游标被释放后,必须使用DECLARE语句来重新生成游标。;游标的典型使用过程 :;1. 声明游标 声明游标使用DECLARE CURSOR语句,格式如下: DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement [ FOR { READ ONLY | UPDATE [ OF column_name [ , …n ] ] } ];其中: cursor_name:所定义游标名称。 SCROLL:指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未指定 SCROLL,默??? NEXT。 select_statement:是定义游标结果集的标准 SELECT 语句。 UPDATE [OF column_name [,...n]]:定义游标内可更新的列。如果指定 OF column_name [,...n] 参数,则只允许修改所列出的列。如果在 UPDATE 中未指定列的列表,则可以更新所有列。;2. 打开游标 打开游标使用OPEN语句,其语法格式如下: OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name } 其中: GLOBAL:指定 cursor_name 指的是全局游标。 cursor_name:已声明的游标的名称。如果全局游标和局部游标都使用 cursor_name 作为其名称,那么如果指定了 GLOBAL,cursor_name 指的是全局游标,否则 cursor_name 指的是局部游标。 cursor_variable_name:游标变量的名称,该名称引用一个游标。;3. 从打开的游标中提取行 格式: FETCH [ [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE { n | @nvar } | RELATIVE { n | @nvar } ] FROM ] { { [ GLOBAL ] cursor_name } | @cursor_variable_name } [ INTO @variable_name [ , …n ] ];其中: NEXT:返回紧跟当前行之后的结果行。 PRIOR:返回紧临当前行前面的结果行。 FIRST:返回游标中的第一行并将其作为当前行。 LAST:返回游标中的最后一行并将其作为当前行。 ABSOLUTE {n | @nvar}:如果 n 或 @nvar 为正数,返回从游标头开始的第 n 行并将返回的行变成新的当前行。如果 n 或 @nvar 为负数,返回游标尾之前的第 n 行并将返回的行变成新的当前行。如果 n 或 @nvar 为 0,则没有行返回。;RELA

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档