2024年4月2日发(作者:)
游标
一、游标的概念
一个对表进行操作的T-SQL语句通常都可产生或处理一组记录,
但是许多应用程序,尤其是T-SQL嵌入到的主语言(如C、VB、
PowerBuilder或其他开发工具)通常不能把整个结果集作为一个单
元来处理,这些应用程序就需要一种机制来保证每次处理结果集中的
一行或几行,游标(cursor)就提供了这种机制。
SQL Server通过游标提供了对一个结果集进行逐行处理的能力,
游标可看做一种特殊的指针,它与某个查询结果相联系,可以指向结
果集的任意位置,以便对指定位置的数据进行处理。使用游标可以在
查询数据的同时对数据进行处理。
在SQL Server中,有两类游标可以用于应用程序中:前端(客
户端)游标和后端(服务器端)游标。服务器端游标是由数据库服务
器创建和管理的游标,而客户端游标是由ODBC和DB-Library支持,
在客户端实现的游标。在客户端游标中,所有的游标操作都在客户端
高速缓存中执行。最初实现DB-Library客户端游标时,SQL Server
尚不支持服务器游标,而ODBC客户端游标是为了用于仅支持游标特
性默认设置的ODBC驱动程序。由于DB-Library和SQL Server ODBC
驱动程序完全支持通过服务器游标的游标操作,所以应尽量不使用客
户端游标。SQL Server2000中对客户端游标的支持也主要是考虑向
后兼容。在这里主要介绍服务器游标。
使用游标要遵循声明游标→打开游标→读取数据→关闭游标→
删除游标的顺序。
二、声明游标
T-SQL中声明游标使用DECLARE CURSOR语句。该语句有两种格
式,分别支持SQL-92标准和T-SQL扩展的游标声明。
1、SQL-92标准的游标声明
SQL-92标准中,声明游标的语句格式为:
DECLARE 游标名 [INSENSITIVE][SCROLL] CURSOR
FOR SELECT语句
[FOR {READ ONLY | UPDATE [OF 列名表]}]
其中:
游标名:是与某个查询结果集相联系的符号名,要符合SQL
Server标识符命名规则。
INSENSITIVE:指定系统将创建供所定义的游标使用的数据的临
时复本,对游标的所有请求都从tempdb中的该临时表中得到应答;
因此,在对该游标进行提取操作时返回的数据中不反映对基本表所做
的修改,并且该游标不允许修改。如果省略INSENSITIVE,则任何用
户对基本提交的删除和更新都反映在后面的提取中。
SCROLL:说明所声明的游标可以前滚、后滚,可使用所有的提取
选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)。如果省
略SCROLL,则只能使用NEXT提取选项。
SELECT语句:由该查询产生与所声明的游标相关联的结果集。
READ ONLY:说明所声明的游标为只读的。UPDATE指定游标中可


发布评论