当查询结果为一组记录时,不能把提取的元组集合直接传递到应用程序中,必须先放到某种缓冲存储空间,这称为使用游标 CURSOR。因此,游标是系统为用户的查询结果开辟的数据缓冲区,存放SQL的查询结果。每个游标有一个单独的名字。
  定义游标,是把该游标与相应的SELECT语句相关联,用于存放该 SELECT 语句的查询结果;打开游标,是执行对应的SELECT 语句,把查询结果放到游标缓冲区中;通过FETCH 函数和主变量从游标缓冲区的查询结果集合中逐一取出每条记录。
  由于SELECT语句是基于集合操作的。无法将结果关系直接交给过程化的宿主语言程序(如C程序),游标正是在这两者之间架起的一座桥梁。DBMS 提供操作函数用于对一个给定游标中的结果集合的数据进行单行处理,通过逐一取出查询结果中的关系元组,逐一放入宿主变量中,完成SQL语言与宿主语言的通讯,该函数为FETCH()。
SQL Server还提供了系统变量@@FETCH_STATUS,保存FETCH函数的执行状态:
 @@FETCH_STATUS = 0 表示执行正确;
 @@FETCH_STATUS = -1 FETCH语句错;
 @@FETCH_STATUS = -2 取的行丢失。

 从概念上讲,游标由两部分内容组成:
 记录集:游标内SELECT语句的执行结果。
 游标位置:游标指针的当前位置。
 游标指针示意图如下图4-24所示:
 图4-24 游标指针示意图

使用游标要遵循如下的操作过程:
 (1). 用DECLARE语句声明游标,并定义游标类型和属性
 (2). 调用OPEN语句打开和填充游标
 (3). 执行FETCH语句读取游标中的单行数据
 (4). 如果需要,修改游标基表中的当前行数据
 (5). 执行CLOSE语句关闭游标
 (6). 执行DEALLOCATE语句删除游标,并释放它所占用的所有资源.
SQL Server中使用游标的过程如图4-25。

图4-25 嵌入式SQL中使用游标的流程