游标可以从多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行,SQL的游标是一种临时的数据库对象,既可以用来存放数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。
游标的一个常见用途就是保存查询结果,以便以后使用。
1. 声明游标
声明一个游标,使游标指针的位置指向该表的首行(在这里首先可以理解为 指向表头)
DECLARE LisCursor CURSOR for select ID, isnull(ltrim(rtrim(PID)),''), ltrim(rtrim(Name)), isnull(rtrim(ltrim(Age)),'') from HisServer
2.打开游标
OPEN LisCursor
3.使用游标的同时给变量赋值
FETCH NEXT FROM LisCursor 这段代码表示游标已经向下移动了一个位置,该段代码通常与 WHILE @@FETCH_STATUS = 0 配合着一块使用
FETCH NEXT FROM LisCursor into @ID, @PID , @Name , @Age
4.获取游标指针位置
@@FETCH_STATUS 值的改变是通过fetch next from实现的 “FETCH NEXT FROM Cursor”为0的时候,表示游标指针指向的那一条记录是有数据的,然后游标就会将查询到的数据直接存入游标捕捉数据的变量中。
WHILE @@FETCH_STATUS=0
作用:Sql中的游标指针的位置判断。代表游标读取下一条数据是否成功!FETCH_STATUS状态有三种:
0, FETCH 语句成功
-1, FETCH 语句失败或此行不在结果集中
-2, 被提取的行不存在
WHILE @@FETCH_STATUS = 0
5.遍历游标
只要游标遍历的表中有结果就会一起遍历下去,直到@@FETCH_STATUS 不为0时,退出循环
WHILE @@FETCH_STATUS = 0 BEGIN insert into HISInterface (ID,PID,Name,Age) values(@ID, @PID , @Name , @Age) FETCH NEXT FROM LisCursor into @ID, @PID , @Name , @Age END
6.关闭游标
CLOSE LisCursor
7.释放游标
DEALLOCATE LisCursor
补充说明
局部变量 @ID 一个@符号声明的变量表示局部变量,一般由开发人员自定义
全部变量 @@FETCH_STATUS 由两个@@符号声明的变量表示全局变量,是数据库预定义的变量
@@FETCH_STATUS 意思是返回被 FETCH 语句执行的最后游标的状态
存储过程中变量赋值的方法
- 使用set关键字对变量进行赋值 set @id = 1;
- 使用into 关键字对变量进行赋值 select 字段名 into 变量名 from 表名...
本文来自博客园,作者:把心动扼杀,转载请注明原文链接:https://www.cnblogs.com/cbt-home/p/15269736.html

浙公网安备 33010602011771号