首页 > 数据库技术 > 详细

SQL Server 创建游标(cursor)

时间:2019-08-20 10:05:22      阅读:67      评论:0      收藏:0      [点我收藏+]

游标的定义:

游标则是处理结果集的一种机制,它可以定位到结果集中的某一行,也可以移动游标定位到你所需要的行中进行操作数据。与 select 语句的不同是,select 语句面向的是结果集,游标面向的是结果集的行。 游标其实可以理解成一个定义在特定数据集上的指针,我们可以控制这个指针遍历数据集,或者仅仅是指向特定的行。

 

游标的分类:

静态游标(static):当游标被建立时,将会创建 FOR 后面的 SELECT 语句所包含数据集的副本存入 tempdb 数据库中,任何对于底层表内数据的更改不会影响到游标的内容。

即打开游标之后,对游标查询的数据表的数据进行增删改操做之后,静态游标中 select 的数据依旧显示的为没有操作之前的数据。

如果想与操作之后的数据一致,则关闭之后重新打开游标即可。

动态游标(dynamic):动态游标与静态游标相反,当底层数据表的数据更改时,游标的内容也随之得到反映,在下一次 fetch 中, 行的数据值、顺序和成员身份在每次提取时都会更改。

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

键集游标(keyset):打开键集驱动游标时,结果集的每行数据被一组唯一标识符进行标识,被标识的列做删改时,用户滚动游标是可见的,其他用户执行的插入是不可见的(不能通过 Transact-SQL 服务器游标执行插入)。如果删除了某行,尝试读取的行返回 @@FETCH_STATUS为-2。 从游标外部更新键值类似于删除旧行后再插入新行。 具有新值的行不可见,并且尝试提取具有旧值的行返回 @@FETCH_STATUS为-2。如果通过指定 WHERE CURRENT OF 子句来通过游标执行更新,则新值可见。

 

游标的生命周期:

游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。

cursor_name:游标的名称

Local:局部游标,只在定义它的批处理,存储过程或触发器中有效。

Global:全局游标,在由此连接执行的任何存储过程或批处理中,都可以引用该游标。该游标仅在断开连接时隐式释放。

如果未指定游标作用域,那么默认为全局游标。

-- 打开游标
open test_cursor

-- 打开局部游标
open local test_cursor

-- 打开全局游标
open global test_cursor

--关闭游标语法
close [ Global ] cursor_name | cursor_variable_name
--关闭游标
close test_cursor

--关闭局部游标
close local test_cursor

--关闭全局游标
close global test_cursor

--释放游标语法
deallocate  [ Global ] cursor_name | cursor_variable_name
--释放游标
deallocate test_cursor

--释放局部游标
deallocate local test_cursor

--释放全局游标
deallocate global test_cursor

--使用游标修改当前数据语法
update 基表名 Set 列名=值[,...] where current of 游标名

update Student set S_Name=‘233‘ where current of test_cursor
--使用游标删除当前数据语法 delete 基表名 where current of 游标名 delete Student where current of test_cursor

SQL Server 创建游标(cursor)

原文:https://www.cnblogs.com/h0906/p/11380989.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!