游标实现
Microsoft® SQL Server™ 2000 支持三种游标实现:Transact-SQL 游标基于 DECLARE CURSOR 语法,主要用在 Transact-SQL 脚本、存储过程和触发器中。Transac-SQL 游标在服务器上实现并由从客户端发送到服务器的 Transact-SQL 语句管理。它们还包含在批处理、存储过程或触发器中。应用编程接口(API)服务器游标支持 OLE DB、ODBC 和 DB-Library 中的 API 游标函数。API 服务器游标在服务器上实现。每次客户应用程序调用 API 游标函数时,SQL Server OLE DB 提供程序、ODBC 驱动程序或 DB-Library 动态链接库(DLL)就把请求传送到服务器,以便对 API 服务器游标进行操作。客户端游标由 SQL Server ODBC 驱动程序、DB-Library DLL 和实现 ADO API 的 DLL 在内部实现。客户端游标通过在客户端高速缓存所有结果集行来实现。每次客户应用程序调用 API 游标函数时,SQL Server ODBC 驱动程序、DB-Library DLL 或 ADO DLL 就对高速缓存在客户端中的结果集行执行游标操作。由于 Transact-SQL 游标和 API 服务器游标都在服务器端实现,它们一起被称为服务器游标。不要混合使用这些不同类型的游标。如果执行一个来自应用程序的 DECLARE CURSOR 和 OPEN 语句,首先需要把 API 游标的特性设置为默认值。如果将 API 游标的特性设置非默认值的其它值,然后又执行 DECLARE CURSOR 和 OPEN 语句,您事实上是在要求 SQL Server 在 Transact-SQL 游标上映射 API 游标。例如,不要将 ODBC 特性设置为调用将键集驱动游标映射为结果集,然后又使用语句句柄执行 DECLARE CURSOR 和 OPEN 以调用 INSENSITIVE 游标。 服务器游标的一个潜在缺点是它们目前并不支持所有的 Transact-SQL 语句。服务器游标不支持生成多个结果集的 Transact-SQL 语句,因此,当应用程序执行包含多个 SELECT 语句的存储过程或批处理时,不能使用服务器游标。服务器游标也不支持包含 COMPUTE、COMPUTE BY、FOR BROWSE 或 INTO 关键字的 SQL 语句。服务器游标与默认结果集的比较
使用游标不如使用默认结果集的效率高。在默认结果集中,从客户端发送到服务器的唯一一个数据包是包含需执行语句的数据包。而在使用服务器游标时,每一个 FETCH 语句都必须从客户端发送到服务器,然后在服务器中将它解析并编译为执行计划。 如果一个 Transact-SQL 语句将返回一个相对较小、可高速缓存于客户端应用程序可用内存中的结果集,且在执行语句前已经知道需要检索整个结果集,那么应使用默认结果集。只有在需要进行游标操作以支持应用程序的功能,或者可能只需检索结果集的一部分时,才会使用服务器游标。服务器游标与客户端游标的比较
用服务器游标代替客户端游标有以下几个优点: 性能 
在访问游标中的一部分数据时(典型如众多浏览应用程序),由于在网络上只发送提取的数据,所以使用服务器游标能够提供最佳的性能。客户端游标则把整个结果集高速缓存在客户端。附加游标类型 
如果SQL Server ODBC 驱动程序只使用客户端游标,则它只能够支持只进和静态游标。通过使用 API 服务器游标,驱动程序也能支持键集驱动和动态游标。同样,SQL Server 仅通过服务器游标支持所有的游标并发特性。客户端游标仅限于它们所支持的功能。更精确的定位更新 
服务器游标直接支持定位操作,例如 ODBC 的 SQLSetPos 函数,或带有 WHERE CURRENT OF 子句的 UPDATE 和 DELETE 语句。另一方面,通过生成 Transact-SQL UPDATE 搜索语句,客户端游标可以模拟定位游标更新;如果有多个行满足 UPDATE 语句中 WHERE 子句的条件,那么这将导致无意识的更新。内存使用 
在使用服务器游标时,客户端无需缓存大量数据或维护游标位置的信息,这些工作由服务器完成。多个活动语句 
使用服务器游标时,结果不会存留在游标操作之间的连接上。这就允许同时拥有多个活动的基于游标的语句。除了静态和不感知游标外,所有服务器游标的操作都取决于基础表的架构。在声明游标后对这些表的架构所做的任何更改将导致随后对此游标进行操作时发生错误。