SQL 游标
一.普通游标 只有NEXT操作
DECLARE @Id varchar(max),@GoodsName varchar(100) --声明变量
DECLARE cursor_name CURSOR FOR --定义游标
SELECT TOP 10 Id,GoodsName FROM Goods
ORDER BY GoodsName DESC
OPEN cursor_name --打开游标
FETCH NEXT FROM cursor_name INTO @Id,@GoodsName --抓取下一行游标数据
WHILE @@FETCH_STATUS = 0 --判断是否抓取成功
BEGIN
PRINT 'ID:'+@Id+' '+'名称:'+@GoodsName --输出
FETCH NEXT FROM cursor_name INTO @Id,@GoodsName --抓取下一行游标数据
END
CLOSE cursor_name --关闭游标
DEALLOCATE cursor_name --释放游标
结果:

@@FETCH_STATUS --全局变量
1.其值有以下三种,分别表示三种不同含义:【返回类型int】
- 0 FETCH 语句成功
-1 FETCH 语句失败或此行不在结果集中
-2 被提取的行不存在
2.@@FETCH_STATUS值的改变是通过fetch next from实现的
“FETCH NEXT FROM cursor_name“
二.滚动游标 有多种操作
--带SCROLL选项的游标
SET NOCOUNT ON --使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。
DECLARE C SCROLL CURSOR FOR --SCORLL 后,有了更多的游标操作(滚动游标)
SELECT TOP 10 Id,GoodsName FROM Goods
ORDER BY GoodsName DESC
OPEN C
FETCH LAST FROM C --最后一行的数据,并将当前行为指定行
FETCH ABSOLUTE 4 FROM C --从第一行开始的第4行数据,并将当前行为指定行 这里的n可正可负,n>0 往下翻,n<0 往上翻
FETCH RELATIVE 3 FROM C --相对于当前行的后3行数据,并将当前行为指定行 这里的n可正可负
FETCH RELATIVE -2 FROM C --相对于当前行的前2行数据,并将当前行为指定行
FETCH PRIOR FROM C ----相对于当前行的前1行数据
FETCH FIRST FROM C --刚开始第一行的数据,并将当前行为指定行
FETCH NEXT FROM C --相对于当前行的后1行数据
CLOSE C
DEALLOCATE C
结果:

SET NOCOUNT
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。
语法
SET NOCOUNT { ON | OFF }
注释
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。

浙公网安备 33010602011771号