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 函数。

posted @ 2020-11-05 18:04  怀星  阅读(99)  评论(0)    收藏  举报