灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2408回复:0

[SQL Server]Sql server游标简析

楼主#
更多 发布于:2012-09-04 18:06

Sql server游标简析

1.什么是游标
  游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标总是与一条T_SQL选择语句相关联,因为游标由结果集(可以是零条、一条、或多条记录)
和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,就要声明一个指向结果集的游标。

2.游标的作用
 (1)游标允许应用程序对查询语句select返回的行结果集中每一行进行相同或不同的操作,
而不是一次对整个结果集进行同一种操作。  http://www.atcpu.com  
 (2)提供对基于游标位置而对表中数据进行删除或更新的能力。

3.游标种类
  SQL Server支持三种类型的游标:Transact_SQL游标、API服务器游标、客户游标。
  (1)Transact_SQL游标
    Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL
脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给
服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。
Transact_SQL 游标不支持提取数据块或多行数据。
  (2)API游标
     API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。
每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或
DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。
  (3)客户游标
    客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,
有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。
由于服务器游标并不支持所有的Transact-SQL 语句或批处理
所以客户游标常常仅被用作服务器游标的辅助。
因为在一般情况下,服务器游标能支持绝大多数的游标操作。

4.游标使用
  使用游标有四个基本的步骤:声明游标、打开游标、提取数据、关闭游标。
  (1)声明游标  http://www.atcpu.com  
    declare myCursor cursor scroll dynamic for
    select [LoginNumber],[Password] from [UsersInfo];/*scroll表示
可随意移动游标(否则只能向前),dynamic表示可以读写游标(否则游标只读)。
这两个都是可设可不设的*/
  (2)打开游标
    open myCursor;
  (3)提取数据
    使用fetch来取得数据,一条fetch语句一次可以将一条记录放入程序员指定的变量中。
    declare @loginNumber varchar(50),@password varchar(50);/*定义变量*/
    fetch next from myCusor into @loginNumber,@password;/*提取数据,
将数据放到定义的变量中*/
    while(@@fetch_status=0)
    begin
      print '登录名:'+@loginNumber+';密码:'+@password;
      fetch next from myCursor into @loginNumber,@password;
    end
    
    fetch的其他使用方法:
    --定位到指定位置的记录
    fetch absolute 10 from myCursor into @loginNumber,@password;
    --定位到当前记录相对位置记录
    fetch relative -88 from myCursor into @loginNumber,@password;
    --定位到当前记录前一条
    fetch prior from myCursor into @loginNumber,@password;
    --定位到当前记录后一条  http://www.atcpu.com  
    fetch next from myCursor into @loginNumber,@password;
    --定位到首记录
    fetch first from myCursor into @loginNumber,@password;
    --定位到尾记录
    fetch last from myCursor into @loginNumber,@password;
  (4)关闭游标
    close myCursor;
    deallocate myCurosr;/*消除游标资源*/




喜欢0 评分0
游客

返回顶部