SQL SERVER CURSOR
1.定义游标
DECLAREcursor_nameCURSOR
FORselect_statement
2.打开游标
OPEN cursor_name
3.遍历游标
FETCH NEXT|PRIOR|FRIST|LAST
FROM cursor_name
INTO@variable_name1, @variable_name2 , …………..
4.@@FETCH_STATUS
返回针对连接当前打开的任何游标发出的最后一条游标 FETCH语句的状态。
| 0 |
FETCH语句成功 |
| -1 |
FETCH语句失败或行不在结果集中。 |
| -2 |
提取的行不存在。 |
5.关闭游标
CLOSE cursor_name
释放当前结果集,然后解除定位游标的行上的游标锁定,从而关闭一个开放的游标。 CLOSE 将保留数据结构以便重新打开,但在重新打开游标之前,不允许提取和定位更新。必须对打开的游标发布 CLOSE;不允许对仅声明或已关闭的游标执行 CLOSE。
6.释放游标
DEALLOCATE cursor_name
删除游标引用。当释放最后的游标引用时,组成该游标的数据结构由Microsoft SQL Server 释放。
7.游标状态
CURSOR_STATUS(‘local’, cursor_name)
CURSOR_STATUS(‘global’, cursor_name)
| 返回值 |
游标名 |
游标变量 |
| 1 |
游标的结果集至少有一行。 对于不区分的游标和键集游标,结果集至少有一行。 对于动态游标,结果集可以有零行、一行或多行。 |
分配给该变量的游标已打开。 对于不区分的游标和键集游标,结果集至少有一行。 对于动态游标,结果集可以有零行、一行或多行。 |
| 0 |
游标的结果集为空。* |
分配给该变量的游标已经打开,然而结果集肯定为空。* |
| -1 |
游标被关闭。 |
分配给该变量的游标被关闭。 |
| -2 |
不适用。 |
可以是: 先前调用的过程并没有将游标分配给 OUTPUT 变量。 先前调用的过程为 OUTPUT 变量分配了游标,然而在过程结束时,游标处于关闭状态。 因此,游标被释放,并且没有返回调用过程。 没有将游标分配给已声明的游标变量。 |
| -3 |
具有指定名称的游标不存在。 |
具有指定名称的游标变量并不存在,或者即使存在这样一个游标变量,但并没有给它分配游标。 |