sqlserver游标.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sqlserver游标

游标—转自熬夜的虫子 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理。 观点 正因为游标可以将结果集一条条取出处理,所以会增加服务器的负担。再者使用游标的效率远远没有使用默认的结果集效率高,在默认结果集中,从客户端发送到服务器的唯一一个数据包是包含需执行语句的数据包。而在使用服务器游标时,每一个FETCH语句都必须从客户端发送到服务器,然后在服务器中将它解析并编译为执行计划。除非要再sqlserver上进行很复杂的数据操作。 基本知识 一. SQL Server 2005 支持两种请求游标的方法   1.Transact-SQL (支持 SQL-92);   2.数据库应用程序编程接口(API)游标函数(ADO、OLE DB、ODBC)应用程序不能混合使用这两种请求游标的方法。ODBC 还支持客户端游标,即在客户  端实现的游标。 二. 游标根据范围可以分成全局游标和局部游标。全局游标可以在整个会话过程中使用,局部游标只能在一个T-SQL批、存储过程或触发器中执行,当执行完毕后局部游标会自动删除。 三. 游标的基本操作,定义游标、打开游标、循环读取游标、关闭游标和删除游标。 语法基础(SQL-92) 以SQL-92方式为例 初始数据PPS_App_Infomation ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 DECLARE @Parm01 varchar(100) DECLARE @Parm02 varchar(100) DECLARE @Parm03 varchar(100) DECLARE cur_Pay INSENSITIVE CURSOR FOR ????SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation] OPEN cur_Pay FETCH cur_Pay INTO @Parm01 , @Parm02 , @Parm03 WHILE @@FETCH_STATUS = 0 BEGIN ????WAITFOR DELAY '00:00:01' ????PRINT @Parm01+'__'+@Parm02+'__'+@Parm03 ????FETCH cur_Pay INTO @Parm01 , @Parm02 , @Parm03 END DEALLOCATE cur_Pay ?其中 cur_Pay为游标名称 INSENSITIVE 用于设置游标是否使用副本 OPEN 打开游标 fetch循环读入游标 DEALLOCATE 删除游标 INSENSITIVE 举个简单的例子 在游标读取过程中 我们将熬夜虫子改成早起虫子看看 是否添加INSENSITIVE 会是什么样的区别 ? 前一个有INSENSITIVE 关键字使用数据副本,后一个无INSENSITIVE 是即时数据 游标的敏感性行为定义了对基行(用于建立游标)所做的更新是否对游标可见。敏感性也定义了能否通过游标进行更新。 scroll 我们再来看看scroll关键字 ? 1 2 3 4 5 6 7 8 9 10 11 DECLARE @Parm01 varchar(100) DECLARE @Parm02 varchar(100) DECLARE @Parm03 varchar(100) DECLARE cur_Pay INSENSITIVE SCROLL CURSOR FOR ????SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation] OPEN cur_Pay BEGIN??????? ????FETCH LAST FROM cur_Pay INTO @Parm01 , @Parm02 , @Parm03? ????PRINT @Parm01+'__'+@Parm02+'__'+@Parm03 END DEALLOCATE cur_Pay 上面的程序是ok的 成功输出? 熬夜虫子__Maoya__06 20 2009? 1:32PM 如果去掉SCROLL关键字会提示 消息 16911,级别 16,状态 1,第 8 行 fetch: 提取类型 last 不能与只进游标一起使用。 SCROLL通过Transact-SQL服务器游标检索特定行。如果SCROLL 选项未在SQL-92样式的DECLARE CURSOR语句中指定,则NEXT是唯一受支持的FETCH 选项。如果在SQL-92样式的DECLARE CURSOR语句中指定

文档评论(0)

didala + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档