游标管理

  关系数据库中的操作作用与表中的所有数据行,SELECT语句返回的结果集由满足WHERE子句条件的所有行组成。应用程序并非总是能有效地把整个结果集作为一个单元来处理,他们需要一种机制类每次处理一行或几行,游标(Cursor)正是为结果集提供这种机制的工具。

一.游标概述

   游标是一种处理数据的方法,它可以对结果集进行逐行处理,也可以指向结果集中的任意位置,并对该位置的数据进行处理。

 1.游标种类

  SQL_Server 支持3中类型的游标:Transact-SQL游标、API服务器游标和客户游标。

1)Transact—SQL游标

Transact—SQL游标是由DECLARE CURSOR语句定义,主要用在服务器上,由从客户端发送给服务器的Transact—SQL语句或批处理、存储过程、触发器中的Transact—SQL语句进行管理。Transact—SQL游标不支持提取数据块或多行数据。

2)API游标

API游标支持再OLE DB、ODBC以及DB_library中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API游标函数,SQL Server的OLE DB提供者、ODBC驱动器或DB——library的动态链接库(。dll)都会将这些客户请求送给服务器以对API游标进行处理。

3)客户游标

客户游标当客户机缓存结果集时才使用。在客户游标中,有一个默认的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标。一般情况下,服务器游标能支持绝大多数的游标操作,单不支持所有的Transact-SQL语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。

 由于API游标和Transact-SQL游标使用在服务器端,所以被称为服务器游标或后台游标,而客户游标被称为前台游标。

2.服务器游标与默认结果集的比较

 SQL Server以两种方式为用户返回结果集:默认结果集和服务器游标。

(1)默认结果集具有的特点:开销小;取数据时提供最大性能;仅支持默认的单进、只读游标功能;返回结果行时一次一行;连接时一次只支持一个活动语句;支持所有Travsact-SQL语句。

(2)服务器游标具有的特点:支持所有游标功能;可以为用户返回数据块;在单个连接上支持多个活动语句;以性能补偿游标功能;不支持所有返回多于一行结果集的Transact-SQL语句。

使用游标不如使用默认结果集的效率高。在默认结果集中客户端只想服务器发送要执行的语句。而使用服务器游标时,每个FETCH语句都必须从客户端发往服务器,再在服务器中分析此语句并将它编译为执行计划。

如果一个Transact-SQL语句将返回一个相对小的结果集,此结果集可以存放在内存中共客户端应用程序使用,而且用户事先知道在执行此语句之前必须检索整个结果集,那么就使用默认结果集。只有在需要游标操作以支持应用程序的功能,或者可能只检索一部分结果集时,才使用服务器游标。

3.服务器游标与客户游标的比较

使用服务器游标比使用客户游标有以下几方面的优点。

(1)性能:如果要在游标中访问部分数据,使用服务器游标将提供最佳性能,因为只有被渠道的数据在网络上发送,客户游标在客户端存取所有结果集。

(2)更准确的定位更新:服务器游标直接支持定位操作,如UPDATE 和DELETE语句,客户游标通过产生Transact-SQL搜索UPDATE语句模拟定位游标更新,如果多行与UPDATE语句的WHERE子句的条件相匹配将导致无意义更新。

(3)内存使用:使用服务器游标时,客户端不需要高速存取大量数据或者保持有关游标位置的信息,这些都由服务器类完成。

(4)多活动语句:使用服务器游标时,结果不会存留在游标操作之间的连接上,这就允许同时拥有多个活动的基于游标的语句。

4.服务器游标类型

SQL Server支持4中类型的服务器游标,它们时单进游标、静态游标、动态游标和键集驱动游标。

(1)单进游标只支持游标按从前向后顺序提取数据,游标从数据库中提取一条记录并进行操作,操作完毕后,再提取下一条记录。

(2)静态游标也称为快照

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值