游标可以从多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行,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
image

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 语句执行的最后游标的状态
存储过程中变量赋值的方法

  1. 使用set关键字对变量进行赋值 set @id = 1;
  2. 使用into 关键字对变量进行赋值 select 字段名 into 变量名 from 表名...
posted on 2021-09-14 21:53  把心动扼杀  阅读(1764)  评论(0)    收藏  举报