API 服务器游标
OLE DB、ODBC、ADO 和 DB-Library API 支持将游标映射至已执行 SQL 语句的结果集。Microsoft® SQL Server™ OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library 动态链接库 (DLL) 通过使用 API 服务器游标执行这些操作。API 服务器游标在服务器上实现,并由 API 游标函数进行管理。当应用程序调用 API 游标函数时,游标操作由 OLE DB 提供程序、ODBC 驱动程序或 DB-Library DLL 传递给服务器。
当在 OLE DB、ODBC 和 ADO 中使用 API 服务器游标时,使用 API 函数和方法实现如下功能:
打开一个连接
设置定义游标特征的特性或属性,API 自动将游标映射到每个结果集。
执行一条或多条 Transact-SQL 语句。
使用 API 函数和方法提取结果集中的行。
在 DB-Library 中,与 API 服务器游标一起使用特殊的 DB-Library 游标库函数。
当 API 游标特性或属性设为其默认值时,SQL Server OLE DB 提供程序和 SQL Server ODBC 驱动程序使用默认结果集。虽然从技术上说 API 要求游标,但默认游标特征与默认结果集的行为是匹配的。因此,OLE DB 提供程序和 ODBC 驱动程序利用默认结果集实现默认游标选项,这是从服务器中检索行最有效的方法。使用默认结果集时,应用程序可执行任何 Transact-SQL 语句和批处理,但是它在一个连接中只能有一个未完成的语句。这意味着在连接上执行下一个语句之前,应用程序必须处理或者取消由一个语句返回的所有结果集。
当 API 游标特性或属性没有按默认值进行设置时,SQL Server OLE DB 提供程序和 SQL Server ODBC 驱动程序将使用 API 服务器游标代替默认结果集。每次对提取行的 API 函数的调用都会产生到服务器的一次往返,以从 API 服务器游标中提取行。
DB-Library 应用程序使用 DB-Library 游标库函数请求游标。如果 DBCLIENTCURSOR 没有设置,那么 DB-Library 游标库函数将采用与 SQL Server OLE DB 提供程序和 SQL Server ODBC 驱动程序相同的方法来使用 API 服务器游标。
API 服务器游标约束
使用 API 服务器游标时,应用程序不能执行下列语句:
服务器游标中SQL Server 不支持的 Transact-SQL 语句。
返回多个结果集的批处理或存储过程。
包含 COMPUTE、COMPUTE BY、FOR BROWSE 或 INTO 子句的 SELECT 语句。
引用远程存储过程的 EXECUTE 语句。
API 服务器游标实现
SQL Server OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library DLL 使用这些特殊的系统存储过程向服务器示意游标操作。
API 系统存储过程
用户在 ADO、OLE DB、ODBC 和 DB-Library 应用程序上运行 SQL Server 事件探查器时,可能会注意到系统存储过程的使用不涉及 Transact-SQL 引用。这些存储过程由用于 SQL Server 的 Microsoft OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library 动态链接库 (DLL) 用来执行数据库 API 功能。这些过程只不过是提供程序或驱动程序所使用的机制,用来传达用户对 SQL Server 的请求。它们仅供用于 SQL Server 的 OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library DLL 在内部使用。不支持从 SQL Server 应用程序显式调用它们。
这些存储过程通过所支持的 API 函数,使得它们的全部功能均可由 SQL Sever 应用程序使用。例如,sp_cursor 系统存储过程的游标功能通过 OLE DB API 游标属性和方法可由 OLE DB 应用程序使用,通过 ODBE 游标特性和函数可由 ODBE 应用程序使用,通过 DB-library 游标库可由 DB-Library 应用程序使用。