zoukankan      html  css  js  c++  java
  • SQL Server 创建游标(cursor)

    游标的定义:

    游标则是处理结果集的一种机制,它可以定位到结果集中的某一行,也可以移动游标定位到你所需要的行中进行操作数据。与 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
  • 相关阅读:
    POJ 1392 Ouroboros Snake 欧拉回路
    POJ 1275 Cashier Employment 差分约束+二分答案
    POJ 1780 Code 欧拉回路+手写栈DFS
    POJ 1300 Door Man 欧拉路的判断
    HDU1534 Schedule Problem 差分约束
    POJ 3169 Layout 差分约束
    POJ 1364 King 差分约束 找负环
    ZOJ 2770 Burn the Linked Camp 差分约束+SPFA
    Zoj 2027 Travelling Fee 最短路变形
    Poj 2263 Heavy Cargo Floyd 求最大容量路
  • 原文地址:https://www.cnblogs.com/h0906/p/11380989.html
Copyright © 2011-2022 走看看