(一)游标
游标(Cursor):用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中 检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用 户自己的意愿来显示和处理这些记录
(二)游标的优点
从游标定义可以得到游标的如下优点,这些优点使游标在实际应用中发挥了重要作用:
1)允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作。
2)提供对基于游标位置的表中的行进行删除和更新的能力
3)游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。
(三)使用游标的步骤
① 声明游标。使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改。
② 打开游标。
③ 从游标的结果集中读取数据。从游标中检索一行或多行数据称为取数据。
④ 对游标中的数据逐行操作。
⑤ 关闭和释放游标
(四)声明游标
declare 游标名 [scroll]cursor for
<select语句>
[for read only|for update of 列名]
其中select语句可以是简单查询,也可以是复杂的连接查询和嵌套查询
例:
Declare mycursor cursor for
select * from AddSalary
(五)游标的两种类型
游标有且只有两种类型:for read only或for update
当游标方式指定为for read only时,游标涉及的表不能被修改。
游标方式指定为for update时,可以删除或更新游标涉及的表中的行。通常,这也是缺省方式,即不指定游标方式时为for update方式
(六)打开游标
1)OPEN 游标名
2)注意:
① 当游标打开成功时,游标位置指向结果集的第一行之前
② 只能打开已经声明但尚未打开的游标。
③ 当执行打开游标的语句时,服务器执行声明游标时使用的SELECT语句
(七)读取游标
fetch [ next | prior | first | last|absolute|relative]
from 游标名
参数说明:
next: 取下一行的数据,并把下一行作为当前行(递增)。由于打开游标后,行指针是指向该游标第1行之前,所以第一次执行fetch next操作将取得游 标集中的第1行数据。next为默认的游标提取选项。
prior: 返回紧临当前行前面的结果行,并且当前行递减为结果行。
first: 返回游标中的第一行并将其作为当前行。LAST:返回游标中的最后一行并将其作为当前行。
absolute:当为正时,返回从游标头开始的第 n 行并将返回的行变成新的当前行
relative: 当为正时,返回当前行之后的第 n 行并将返回的行变成新的当前行。
(八)查看游标信息
/*检查@@FETCH_STATUS以确定是否还可以继续取数*/
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM authors_cur
END
@@FETCH_STATUS=0, FETCH 语句成功 ;
@@FETCH_STATUS=-1, FETCH 语句失败或此行不在结果集中
@@FETCH_STATUS=-2,被提取的行不存在。
(九)使用游标修改数据
通过在UPDATE语句中使用游标可以更新表或视图中的行。被更新的行依赖于游标位置的当前值.
语法:
UPDATE 表名(或视图名)
SET 列名=修改后的值
WHERE CURRENT OF 游标名
注:
表名可省略,但必须是声明游标中的表名.且游标必须是已经打开的游标.
(十)所有游标删除数据
语法:
DELETE FROM 表名
WHERE CURRENT OF 游标名
用于删除游标当前位置所在的行.删除一行后将游标位置向前移动一行。