SQL Server中cursor的使用步骤
2024-08-26 00:06:31
参考文章:
http://www.cnblogs.com/knowledgesea/p/3699851.html
http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html
http://www.cnblogs.com/dubing/archive/2011/11/07/2238868.html
http://www.tuicool.com/articles/eAJbEzZ
游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。
声明游标
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]
具体的参数说明: cursor_name:游标名称。
Local:作用域为局部,只在定义它的批处理,存储过程或触发器中有效。
Global:作用域为全局,由连接执行的任何存储过程或批处理中,都可以引用该游标。
[Local | Global]:默认为local。
Forward_Only:指定游标智能从第一行滚到最后一行。Fetch Next是唯一支持的提取选项。如果在指定Forward_Only是不指定Static、KeySet、Dynamic关键字,默认为Dynamic游标。如果Forward_Only和Scroll没有指定,Static、KeySet、Dynamic游标默认为Scroll,Fast_Forward默认为Forward_Only
Static:静态游标
KeySet:键集游标
Dynamic:动态游标,不支持Absolute提取选项
Fast_Forward:指定启用了性能优化的Forward_Only、Read_Only游标。如果指定啦Scroll或For_Update,就不能指定他啦。
Read_Only:不能通过游标对数据进行删改。
Scroll_Locks:将行读入游标是,锁定这些行,确保删除或更新一定会成功。如果指定啦Fast_Forward或Static,就不能指定他啦。
Optimistic:指定如果行自读入游标以来已得到更新,则通过游标进行的定位更新或定位删除不成功。当将行读入游标时,sqlserver 不锁定行,它改用timestamp列值的比较结果来确定行读入游标后是否发生了修改,如果表不行timestamp列,它改用校验和值进行确定。如果已 修改改行,则尝试进行的定位更新或删除将失败。如果指定啦Fast_Forward,则不能指定他。
Type_Warning:指定将游标从所请求的类型隐式转换为另一种类型时向客户端发送警告信息。
For Update[of column_name ,....] :定义游标中可更新的列。
打开游标:
open [ Global ] cursor_name | cursor_variable_name
提取数据
Fetch
[ [Next|prior|Frist|Last|Absoute n|Relative n ]
from ]
[Global] cursor_name
[into @variable_name[,....]]
具体参数说明:
- Frist:结果集的第一行
- Prior:当前位置的上一行
- Next:当前位置的下一行
- Last:最后一行
- Absoute n:从游标的第一行开始数,第n行。
- Relative n:从当前位置数,第n行。
- Into @variable_name[,...] : 将提取到的数据存放到变量variable_name中
- 全局变量@@Fetch_Status的值分别取(0:Fetch语句成功;-1:Fetch语句失败或行不在结果集中;-2:提取的行不存在),获得提取的状态信息,主要用来判断Fetch语句返回数据的有效性。
--游标修改当前数据语法
Update 基表名 Set 列名=值[,...] Where Current of 游标名
--游标删除当前数据语法
Delete 基表名 Where Current of 游标名
关闭游标:
close [ Global ] cursor_name | cursor_variable_name
释放游标:
deallocate [ Global ] cursor_name | cursor_variable_name
具体的例子:
错误分析:
最新文章
- Javascript算法系列之快速排序(Quicksort)
- if else 的妙用 —— 顾客视角
- Qt qtextstream读取文件
- JDK-Logger
- 【函数】oracle translate() 详解+实例
- shell脚本 gawk语言 综采话单 对账 字段核对
- 1046	Shortest Distance (20)
- struts2 I18n问题 国际化
- linux的sudo apt-get install 和dpkg -i <;package.deb>;命令
- POJ 1743 - Musical Theme 最长不重叠重复子串
- MvcPager
- WebService 调用三种方法
- 探讨弹性布局Flexible Box
- AIO5岗位桌面主页【我的收藏夹】只显示8行,怎样增加显示行?
- Programming In Scala笔记-第五章、Scala中的变量类型和操作
- Git设置彩色输出
- CM记录-集群主机存储情况
- jQuery - 同时添加click和dblclick事件
- SpringBoot日记——Thymeleaf模板引擎篇
- MySQL 双主问题集
热门文章
- python成长之路【第十五篇】:JavaScript初步认识
- 慕课网__css3__3D
- Android 之surfaceView (画动态圆圈)
- java appium api
- 转:C/C++程序员简历模板
- selenium提供了三种模式的断言:assert,verify,waitfor
- 关于Application.Lock和Lock(obj) 转 http://www.cnblogs.com/yeagen/archive/2012/03/01/2375610.html
- 错误: java.lang.reflect.InvocationTargetException
- 数据类型、常量、变量、printf、scanf和运算符
- java中调用xml的方法:DocumentBuilderFactory