ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

游标

2021-10-24 19:03:58  阅读:194  来源: 互联网

标签:-- 游标 fetch CURSORMember MemberAccount declare


什么是游标:

游标类似于一个指针,游标就是把数据结果放到内存中,然后游标指向这个内存地址,就像数据结构里的出栈和入栈的操作里的指向一样。

作用:

定位到结果集中某一行。
以让我们一行一行的去处理数据, 类似c# ado.net SqlDataReader 可以提供一行一行的读取数据

游标分类:

1)静态游标(Static):在操作游标的时候,数据发生变化,游标中数据不变
2)动态游标(Dynamic):在操作游标的时候,数据发生变化,游标中数据改变
3)键集驱动游标(KeySet):在操作游标的时候,被标识的列发生改变,游标中数据改变,其他列改变,游标中数据不变

使用游标的步骤:

1:创建游标 declare 游标名字 cursor for ....接语句
2:打开游标 open 游标名字
3:查询游标(可以是遍历) fetch next from 游标名称 into 变量
4:关闭游标 close 游标名字
5:删除(释放)游标 deallocate 游标名字

@@fetch_status:查询游标有没有读完,如果是-1就说明游标读完了,
注意:游标打开的初始@@fetch_status也是等于-1,没有读取的时候是-1,读取完了也是-1,等于0表示提取成功

基本使用:

定义一个动态游标,

--1.创建游标(Scroll代表滚动游标,不加Scroll则是只进的,只能支持fetch next)
declare CURSORMember cursor scroll		--CURSORMember :游标名字
for select MemberAccount from Member       --查一行的某个字段给游标
--2.打开游标
open  CURSORMember
--3.提取数据
fetch first from CURSORMember --结果集的第一行
fetch last from CURSORMember  --最后一行
fetch absolute n from CURSORMember --从游标的第一行开始数,第n行,会让游标停留在第n行,用于定位游标
fetch relative 3 from CURSORMember --从当前位置数,第n行。
fetch next from CURSORMember --当前位置的下一行
fetch prior from CURSORMember --当前位置的上一行

--4.提取数据给变量以供它用(取出第3行用户名,查询该用户详细信息)
--declare @MemberAccount varchar(30)
--fetch absolute 3 from CURSORMember into @MemberAccount
--select * from Member where MemberAccount = @MemberAccount


--5.利用游标提取所有的账户信息
--方案一:
fetch absolute 1 from CURSORMember
while @@FETCH_STATUS = 0  --@@FETCH_STATUS=0,提取成功,-1提取失败,-2行不存在
	begin
		fetch next from CURSORMember	 --当前位置的下一行
	end
--方案二:
declare @MemberAccount varchar(30)
fetch absolute 1 from CURSORMember into @MemberAccount	--将游标指向第一行
while @@FETCH_STATUS = 0  --@@FETCH_STATUS=0,提取成功,-1提取失败,-2行不存在
	begin
		print '提取成功:' + @MemberAccount
		fetch next from CURSORMember into @MemberAccount
	end




--6.利用游标修改和删除数据
fetch absolute 3 from CURSORMember
update Member set MemberPwd = '1234567' where Current of CURSORMember  --条件直接写游标名字就好了,因为游标当前就指向这行数据

fetch absolute 3 from CURSORMember
delete Member where Current of CURSORMember

select * from Member

--7.关闭游标
close CURSORMember
--8.删除游标
deallocate CURSORMember


--9.创建游标指向某行多列数据,并循环显示数据
declare CURSORMember cursor scroll
for select MemberAccount,MemberPwd,MemberNickname,MemberPhone from Member

open CURSORMember

declare @MemberAccount varchar(30)
declare	@MemberPwd nvarchar(20)
declare	@MemberNickname nvarchar(20)
declare	@MemberPhone nvarchar(20)
fetch next from CURSORMember into @MemberAccount,@MemberPwd,@MemberNickname,@MemberPhone
while @@FETCH_STATUS = 0  --@@FETCH_STATUS=0,提取成功,-1提取失败,-2行不存在
	begin
		print '提取成功:' + @MemberAccount+','+@MemberPwd+','+@MemberNickname+','+@MemberPhone
		fetch next from CURSORMember into @MemberAccount,@MemberPwd,@MemberNickname,@MemberPhone
	end
close CURSORMember


标签:--,游标,fetch,CURSORMember,MemberAccount,declare
来源: https://www.cnblogs.com/fhzmasl/p/15452151.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有