绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
数据库游标之SQLServer游标定义使用
2023-02-23 14:49:42

游标:是一种处理数据的方法,主要用于存储过程,触发器和 T_SQL脚本中,它们使结果集的内容可用于其它T_SQL语句。在查看或处理结果集中向前或向后浏览数据的功能。类似与C语言中的指针,它可以指向结果集中的任意位置,当要对结果集进行逐条单独处理时,需要声明一个指向该结果集中的游标变量。

sqlserver支持的游标类型: 

1、静态游标: 静态游标的结果集,在游标打开的时候建立在TempDB中,不论你在操作游标的时候,如何操作数据库,游标中的数据集都不会变。例如你在游标打开的时候,对游标查询的数据表数据进行增删改,操作之后,静态游标中select的数据依旧显示的为没有操作之前的数据。如果想与操作之后的数据一致,则重新关闭打开游标即可。

2、动态游标:这个则与静态游标相对,滚动游标时,动态游标反应结果集中的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会变化。所有用户做的增删改语句通过游标均可见。如果使用API函数或T-SQL Where Current of子句通过游标进行更新,他们将立即可见。在游标外部所做的更新直到提交时才可见。

3、只进游标:只进游标不支持滚动,只支持从头到尾顺序提取数据,数据库执行增删改,在提取时是可见的,但由于该游标只能进不能向后滚动,所以在行提取后对行做增删改是不可见的。

4、键集驱动游标:打开键集驱动游标时,该有表中的各个成员身份和顺序是固定的。打开游标时,结果集这些行数据被一组标识符标识,被标识的列做删改时,用户滚动游标是可见的,如果没被标识的列增该,则不可见,比如insert一条数据,是不可见的,若可见,须关闭重新打开游标。

游标的使用情景:

静态游标在滚动时检测不到表数据变化,但消耗的资源相对很少。动态游标在滚动时能检测到所有表数据变化,但消耗的资源却较多。键集驱动游标则处于他们中间,所以根据需求建立适合自己的游标,避免资源浪费。


游标定义:

--声明一个游标 

DECLARE MyCursor CURSOR 

FOR SELECT  column1,column2 FROM table where column =条件 /定义一个叫MyCursor的游标,存放for select 后的数据 

--打开一个游标 

OPEN MyCursor//即打开这个数据集 

--循环一个游标 

DECLARE @c1value  type,@c2value  type

FETCH NEXT FROM MyCursor INTO @c1value  ,@c2value //移动游标指向到条数据,提取条数据存放在变量中 

WHILE @@FETCH_STATUS =0//如果上一次操作成功则继续循环 

BEGIN 

print 'name'+@BookName 

FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding//继续提下一行fetch后面参数[ [Next|prior|Frist|Last|Absoute n|Relative n ] 

END 

--关闭游标 

CLOSE MyCursor 

--释放资源 

DEALLOCATE MyCursor ;

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Microsoft SQL Server
创建时间:2022-03-30 11:29:11
Microsoft SQL Server
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~