SQL 游标知识整理
游标声明格:
declare 游标名称 cursor (游标关键字) for 游标操作对象(select * from 表名称)
游标使用:
open 游标名称;
fetch first from 游标名称 ---遍历游标操作数据对象的第一行
fetch last from 游标名称 --- 获取游标操作数据的最后一行
fetch prior from 游标名称 --- 获取游标操作数据的前一行
fetch next from 游标名称 ---获取游标操作数据的下一行
fetch absolute 数值(用户指定的跳转到第几行的数值) from 游标名称 --- 跳转至用户指定的数据行数
fetch relative 数值(用户指定的相对跳转行数数据) from 游标名称----从当前行开始跳转用户指定的数据行数
close 游标名称 ---关闭游标
deallocate 游标名称 ---释放游标
游标关键字:
local --表示局部游标
global--全局游标 当全局游标和局部游标冲突时系统默认打开局部游标
forward_only ---表示游标遍历数据时只有一个方向
scroll ---表示游标遍历数据时有上下两个方向
static---意味着,当游标被建立时,将会创建FOR后面的SELECT语句所包含数据集的副本存入tempdb数据库中,任何对于底层表内数据的更改不会影响到游标的内容.
dynamic ---是和STATIC完全相反的选项,当底层数据库更改时,游标的内容也随之得到反映,在下一次fetch中,数据内容会随之改变
keyset ---将游标所在结果集的唯一能确定每一行的主键存入tempdb,当结果集中任何行改变或者删除时,@@FETCH_STATUS会为-2,KEYSET无法探测新加入的数据
fast_forward ---可以理解成FORWARD_ONLY的优化版本.FORWARD_ONLY执行的是静态计划,而FAST_FORWARD是根据情况进行选择采用动态计划还是静态计划,大多数情况下FAST_FORWARD要比FORWARD_ONLY性能略好.
read_only --READ_ONLY意味着声明的游标只能读取数据,游标不能做任何更新操作
scroll_locks ---是另一种极端,将读入游标的所有数据进行锁定,防止其他程序进行更改,以确保更新的绝对成功
optimistic ---是相对比较好的一个选择,OPTIMISTIC不锁定任何数据,当需要在游标中更新数据时,如果底层表数据更新,则游标内数据更新不成功,如果,底层表数据未更新,则游标内表数据可以更新
对于游标一些优化建议:
如果能不用游标,尽量不要使用游标用完用完之后一定要关闭和释放尽量不要在大量数据上定义游标尽量不要使用游标上更新数据尽量不要使用insensitive, static和keyset这些参数定义游标如果可以,尽量使用FAST_FORWARD关键字定义游标如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数
游标SQL语句:
游标声明格:
declare 游标名称 cursor (游标关键字) for 游标操作对象(select * from 表名称)
游标使用:
open 游标名称;
fetch first from 游标名称 ---遍历游标操作数据对象的第一行
fetch last from 游标名称 --- 获取游标操作数据的最后一行
fetch prior from 游标名称 --- 获取游标操作数据的前一行
fetch next from 游标名称 ---获取游标操作数据的下一行
fetch absolute 数值(用户指定的跳转到第几行的数值) from 游标名称 --- 跳转至用户指定的数据行数
fetch relative 数值(用户指定的相对跳转行数数据) from 游标名称----从当前行开始跳转用户指定的数据行数
close 游标名称 ---关闭游标
deallocate 游标名称 ---释放游标
对于游标一些优化建议
如果能不用游标,尽量不要使用游标用完用完之后一定要关闭和释放尽量不要在大量数据上定义游标尽量不要使用游标上更新数据尽量不要使用insensitive, static和keyset这些参数定义游标如果可以,尽量使用FAST_FORWARD关键字定义游标如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数
最新文章
- python面试题目
- Consul Template的简单使用
- moment.js 的简单应用
- sql创建表格 转载
- spring 依赖注入 小结
- MonkeyRunner学习(3)脚本编辑
- VHDL之Port map and open
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (六) 自动化测试结构小节
- 简单遗传算法求解n皇后问题
- hdu4777-Rabbit Kingdom
- ASP.NET会员注册登录模块(MD5加密,Parameters防止SQL注入,判断是否注册)
- Calendar类的基本使用
- nyoj 76
- vs2008工程配置
- HDOJ 1003 Max Sum(线性dp)
- NginX issues HTTP 499 error after 60 seconds despite config. (PHP and AWS)
- Atitit.软件GUIbutton与仪表盘--db数据库区--导入mysql sql错误的解决之道
- js获取当前的日期时间 格式“yyyy-MM-dd HH:MM:SS”
- c++中二级指针的使用场景
- jQuery-图片放大镜
热门文章
- cordova APP 检查更新
- java 子类重写父类的方法
- python3 操作注册表
- Unity3d 鼠标的事件GetMouseButtonDown()、GetMouseButton()、GetMouseButtonUp()
- android 随着认识的去除率EditText(它配备了防抖效果)
- 潜移默化学会WPF--值转换器
- AngularJS 多级下拉框
- NSLocalizedDescription=Request failed: unacceptable content-type: text/html 解决方法
- 【Python】wifi开关测试
- VS2013环境里安装QT插件-“X86”与目标计算机类型“x64”冲突