注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

吴士龙

机会,永远留给有准备的人。

 
 
 

日志

 
 

SQL Sever游标简析  

2014-10-18 21:33:47|  分类: 数据库学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
       最近在复习的数据库考试中遇到了游标的问题,而自己对这一块儿感觉有点陌生,花了一个多小时,总结了一下这方面的知识,作以分享:
1.什么是游标
          游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,它可以指定结果中的任何位置?,然后允许用户对指定位置的数据进行处理。
          游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
          游标总是与一条T_SQL选择语句相关联,因为游标由结果集(可以是零条、一条、或者多条记录)和结果集中只想特定记录的游标位置组成。当决定对结果及进行处理时,就要声明一个指向结果集的游标。
2.游标的作用
        (1)游标允许应用程序对查询语句select返回的行结果集中每一行进行相同或不同种操作,而不是一次对整个结果进行同一种操作;
         (2)提供对基于游标位置而对表中数据进行删除或更新的能力。
3.游标种类
          SQL Sever支持三种类型的游标:Transant——SQL游标、API服务器游标、客户游标。
    (1)T_SQL游标
   T_SQL游标是由DECLAECURSOR语法东一、主要用在T_SQL脚本、存储过程和触发器中。T_SQL游标主要用在服务器上,由客户端发送给服务器的T_SQL语句或是 批处理、存储过程、触发器中的T_SQL进行管理。
   T_SQL游标不支持提取数据块或多行数据管理。
    (2)API游标
    API游标支持在OLEDB,ODBC以及DB_library中使用游标函数,主要用在服务器上。
   每一次客户端应用程序调用API游标函数,MSSQLSEVER的OLEDB提供者ODBC驱动器或DB_library的动态链接库(DLL)都会将这些客户请求传送给服务器以对API游标进行处理。
    (3)客户游标
    客户游标主要是当时在客户机上缓存结果时才使用。在客户游标中,有一个缺省的结果被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。
   由于服务器游标并不支持所有的T_SQL语句或批处理,所以客户游标常常仅被用作服务器由标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。
4.游标使用
       使用游标有四个基本的步骤:声明游标、打开游标、提取数据、关闭游标。
      (1)声明游标
          declaremyCursorcursorscrolldy namicfor
          select[LoginNumber],[Password]from[Usersinfo];/*scroll表示可以随意移动游标(否则只能向前),dynamic表示可以读写游标(否则游标只读)。这两个都是可设可不设的。*/
       (2)打开游标
          openmyCursor;
       (3)提取数据
           使用fetch来取得数据,一条fetch语句一次可以讲一条记录放入程序员指定的变量中。
           declare@loginNumbervarchar(50),@passwordvarchar(500;/*定义变量*/
           fetchnextfrommyCusorinto@loginNumber,@password;/*提取数据,将数据放入到定义的变量*/
           while(@@fetch_status=0)
           begin
           print'登录名:'+@loginNumber+';密码:'+@password;
           end
       fetch的其他使用方法: 
                ---定位到指定位置的记录
                fetchabsolute10frommyCursorinto@loginNumber,@password;
                ---定位到当前记录的相对位置记录
                fetchrelative-88frommyCursorinto@loginNumber,@password;
                ---定位到当前记录前一条
                fetchpriorfrommyCursorinto@loginNumber,@password;
                ---定位到当前记录后已一条
                fetchnextfrommyCursorinto@loginNumber,@password;    
                ---定位到首记录
                fetchfirstfrommyCursorinto@loginNumber,@password;    
                ---定位到尾记录
                fetchlastfrommyCursorinto@loginNumber,@password; 
        (4) 关闭游标
               closemyCursor;
                deallocatemyCurosr;/*消除游标资源*/        
          
    
  评论这张
 
阅读(37)| 评论(34)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017