游标
游标(Cursor)是一种数据访问机制,它允许用户访问单独的数据行,而不是对整个行集进行操作。用户可以通过单独处理每一行逐条收集信息并对数据逐行进行操作,这样可以降低系统开销和潜在的阻隔情况。用户也可以使用这些数据生成SQL代码并立即执行或输出。
游标主要包括以下两部分:
- 游标结果集由定义游标的SELECT语句返回的行的集合
- 游标位置指向这个结果集中的某一行的指针
游标的特点:
- 游标返回一个完整的结果集,但允许程序设计语言只调用集合中的一行
- 允许定位在结果集的特定行
- 从结果集的当前位置检索一行或多行
- 支持对结果集中当前位置的行进行数据修改
- 可以为其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持
- 提供脚本、存储过程和触发器中使用的访问结果集中数据的T-SQL语句
游标的声明
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR { READ ONLY | UPDATE [OF column_name[,…n]]}]
操作游标
- 打开游标
OPEN{{[GLOBAL] cursor_name} | cursor_variable_name}
- 检索游标
FETCH
[ [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE{n|@nvar} | RELATIVE{n|@nvar}]FROM]
{{[GLOBAL]cursor_name}| @cursor_variable_name}
[INTO @variable_name [,…n] ]
- 关闭游标
CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }
- 释放游标
DEALLOCATE { { [ GLOBAL ] cursor_name} | @cursor_variable_name }
判断游标提取状态
@@FETCH_STATUS
取值:
0 FETCH语句成功
-1 FETCH语句失败或行不在结果集中
-2 提取的行不存在
举一个小小的例子:
游标的类型
Const adOpenForwardOnly = 0 前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。
Const adOpenKeyset = 1 静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。
Const adOpenDynamic = 2 键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。
Const adOpenStatic = 3 动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。
来源:CSDN
作者:苏圆梦
链接:https://blog.csdn.net/mumuxi709/article/details/104683115