SQL Server 数据库的维护(四)__游标(cursor)

--维护数据库--


 


 

--游标(cursor)--

--概述

注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制。可以将游标理解为指针指针指向哪条记录,哪条记录即是被操作记录

游标处理结果集的方式:

1)允许定位在结果集的指定位置行

2)从结果集的当前位置检索一行或一部分行记录

3)支持对结果集当前位置做数据修改、删除等操作

 

--使用游标

注:使用游标定位和操作数据记录的一般步骤为:声明游标、打开游标、抽取数据、关闭游标和释放游标

--声明游标 (declare … cursor)

注:声明游标跟声明变量相似,用declare命令

declare 游标名 cursor --declare表示声明游标名,cursor表示游标含义

[forward_only] [scroll] [read_only] [dynamic] --可选项forward_only表示游标为只进游标。可选项read_only定义游标为只读游标。可选项scroll表示可以使用所有抽取数据的选项。可选项dynamic表示游标结果集中的数据可以修改。

for select语句 [for update [of 字段名 [ , ...] ] ] --select语句指能够查询到结果集的查询语句,其中不能包含compute、compute by和into语句。要对结果集中做update修改操作时,可以使用of字段名来指明允许被修改的字段名,如果不使用of指定字段名,则所有字段都修改。

 

--打开游标

open 游标名 --open命令表示打开。“游标名”必须是已定义的、且没有在使用的游标。刚打开游标,指针指向结果集中第一条记录之前。

全局标量@@error可以判断游标是否打开成功,如果返回0只则说明成功,否则失败。

全局变量@@cursor_rows可以返回被打开的游标中记录个数。

 

--抽取游标

fetch [first | prior | next | last | absolute {n|@变量} | relative {n|@变量} ] --fetch命令表示抽取数据,一次只能抽取一条记录

[from] 游标名 [into @变量名 [, ...] ] --into@变量名,...把抽取出的字段值赋值给指定变量,然后使用。

--first命令用来抽取结果集中的第一条记录,并定位指针。

--prior命令用来抽取当前记录的前一条记录,并定位指针。如果当前记录为结果集中的第一条记录,prior命令则使指针上移至第一条记录上方,并不会抽取结果。

--next命令用来抽取当前记录的后一条记录,并定位指针。新打开的数据库使用next抽取出结果集中第一行记录。如果结果集中最后一行记录为当前记录,next则使指针指向最后一条记录下方,并不会抽取出结果。

--last命令用来抽取结果集中的最后一条记录,并定位指针。

--absolute {n|@变量},当n(或@变量)为正数时,返回结果集中从头开始的第n(或@变量)条记录,并定位指针当n(或@变量)为负数时,返回结果集中从末尾开始的第n(或@变量)条记录,并定位指针。

--relative {n|@变量},当n(或@变量)为正数时,返回结果集中从当前行开始向下的第n(或@变量)条记录,并定位指针;当n(或@变量)为负数时,返回结果集中从末尾开始的第n(或@变量)条记录,并定位指针。

--可以使用全局变量@@fetch_status的值来判断fetch命令是否抽取到数据值为0表示抽取到记录值为-1表示指针指向结果集最后一条记录下方值为-2表示抽取操作存在问题

 

--关闭游标

close 游标名 --游标关闭后不能使用fetch命令抽取游标中的记录,除非再次使用open命令(打开)重新打开。

 

--释放游标

deallocate 游标名 --被释放后的游标不能再使用open命令打开使用,除非使用declare命令(声明)重新定义。

例:(***下面是一个帮助理解的案例***)(逐条查看“商品管理数据库”的“销售信息表”中2012年12月20日的销售信息)use 商品管理数据库goset nocount on--声明游标declare c_销售表_日期 cursorforselect 商品信息表.商品编号,商品信息表.商品名称,销售金额 from 商品信息表,销售信息表 where 商品信息表.商品编号=销售信息表.商品编号and 销售日期='2012-12-20'--打开游标open c_销售表_日期--抽取数据beginprint '=====2012年12月20日销售信息====='declare @pdno nchar(8),@pdname nvarchar(10), @salemoney decimal(17,2)--抽取第一条记录,并将抽取到的变量赋值给相应变量fetch next from c_销售表_日期 into @pdno,@pdname,@salemoney--使用全局变量@@fetch_status值是否为0作为循环判断条件,检验是否抽取到记录,如抽取到就在循环体内输出抽取到的值,--再继续使用fetch命令抽取数据,直到@@FETCH_STATUS的值不为0为止while(@@FETCH_STATUS=0)beginprint '商品编号:'+@pdno+' 商品名称:'+@pdname+' 销售金额:'+convert(nchar(25),@salemoney)fetch next from c_销售表_日期 into @pdno,@pdname,@salemoneyendend--关闭游标close c_销售表_日期--释放游标deallocate c_销售表_日期set nocount offgo
理解例子 

 注:"--"可看成说明或者注释文本

转载于:https://www.cnblogs.com/xifengyeluo/p/5898518.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于在unity中动态获取字符串后在InputField上进行判断的BUG

今天想做一个简单的密码锁定控制功能,但是出现了问题。我是在游戏开始时读取streamingAsset中的text中的文本,其实就是密码如下图密码是123456789 然后我在程序中输入了该密码出现错误,居然错了。 然后我打印读取的文本信息是什么、没错啊。然…

转载 调用xvid 实现解码

2011-06-01 00:26:14) 转载view plaincopy to clipboardprint? /// intinit_decoder() { intret; xvid_gbl_init_t xvid_gbl_init; xvid_dec_create_txvid_dec_create; memset(&xvid_gbl_init, 0,sizeof(xvid_gbl_init_t)); memset(…

创业感悟:技术兄弟为什么一直没有起来(1)

相信很多做技术的朋友,看到“人脉”两个字,就显得有些敏感,有人甚至产生一种“抵触”的心理。 因为在很多人的心中,会自动的把“人脉”和“关系”关联起来,会把“人脉”与“走后门”,甚至会和“酒桌文化”&…

京东入职一周感悟:4个匹配和4个观点

入职一周啦,随便写点。一、京东之缘1、我和京东之间的4点匹配Ⅰ技术2008年9月到2016年9月,一直坚持自学技术。京东,是一家商业化的互联网公司,有技术积淀,有发挥空间。作为技术人员,职业匹配。Ⅱ读书大学的…

01_SQlite数据库简介

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7023014.html

开发人员MySQL调优-理论篇

2019独角兽企业重金招聘Python工程师标准>>> 修改字符集 查看字符集 show variables like character% show variables like %char% 上面的两个命令都可以,我一般使用的下面的,会出来如下几个字符集设定的选项: character_set_clie…

通过ProGet搭建一个内部的Nuget服务器

.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以及更新组件即可一键完成,大大提升工作效…

unity官方教程-TANKS(一)

unity官方教程TANKS,难度系数中阶。跟着官方教程学习Unity,通过本教程你可以学会使用Unity开发游戏的基本流程。 一、环境 Unity 版本 > 5.2Asset Store 里面搜索 Tanks!Tutorial ,下载导入 二、项目设置 为了便于开发,很多时候我们选用的…

VS配置本地IIS以域名访问

1.IIS下配置自己的网站,添加主机名 2.修改hosts文件(C://Windows/System32/drivers/etc) 3.VS中配置项目Web服务器(选择外部主机) 转载于:https://www.cnblogs.com/zuimeideshi520/p/7028544.html

Spark RDD/Core 编程 API入门系列 之rdd实战(rdd基本操作实战及transformation和action流程图)(源码)(三)...

本博文的主要内容是: 1、rdd基本操作实战 2、transformation和action流程图 3、典型的transformation和action RDD有3种操作: 1、 Trandformation 对数据状态的转换,即所谓算子的转换 2、 Action 触发作业,即所谓得结果…

灯塔的出现给那些有想法,有能力而又缺乏资金的社区人士提供了一条途径

2019独角兽企业重金招聘Python工程师标准>>> 在上个月,BCH社区传出基于比特币现金的众筹平台Lighthouse(灯塔)正在复活的消息,并且有网友在论坛上贴出了部分网站图片。当消息被证实为真,官网和项目的审核细…

PID 算法理解

PID 算法 使用环境:受到外界的影响不能按照理想状态发展。如小车的速度不稳定的调节,尽快达到目标速度。 条件:闭环系统->有反馈 要求:快准狠 分类:位置式、增量式 增量式 输入:前次速度、前前次速度、前…

三种方式在CentOS 7搭建KVM虚拟化平台

KVM 全称是基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux的一个内核模块,该内核模块使得 Linux变成了一个Hypervisor:它由 Quramnet开发,该公司于 2008年被 Red Hat 收购 KVM的整体结构&…

(五)EasyUI使用——datagrid数据表格

DataGrid以表格形式展示数据,并提供了丰富的选择、排序、分组和编辑数据的功能支持。DataGrid的设计用于缩短开发时间,并且使开发人员不需要具备特定的知识。它是轻量级的且功能丰富。单元格合并、多列标题、冻结列和页脚只是其中的一小部分功能。具体功…

拾取模型的原理及其在THREE.JS中的代码实现

1. Three.js中的拾取 1.1. 从模型转到屏幕上的过程说开 由于图形显示的基本单位是三角形,那就先从一个三角形从世界坐标转到屏幕坐标说起,例如三角形abc 乘以模型视图矩阵就进入了视点坐标系,其实就是相机所在的坐标系,如下图&am…

旧知识打造新技术--AJAX学习总结

AJAX是将旧知识在新思想的容器内进行碰撞产生的新技术:推翻传统网页的设计技术。改善用户体验的技术。 学习AJAX之初写过一篇《与Ajax的初次谋面》。当中都仅仅是一些自己浅显的理解,这次就总结一下它在历史长河中的重要地位。 【全】 AJAX全称为Asnychr…

redis(一)--认识redis

Redis官网对redis的定义是:“Redis is an open source, BSD licensed, advanced key-value cache and store”,可以看出,Redis是一种键值系统,可以用来缓存或存储数据。Redis是“Remote Dictionary Server”(远程字典服…

SQLSEVER 中的那些键和约束

SQL Server中有五种约束类型,各自是 PRIMARY KEY约束、FOREIGN KEY约束、UNIQUE约束、DEFAULT约束、和CHECK约束。查看或者创建约束都要使用到 Microsoft SQL Server Managment Studio。1. PRIMARY KEY约束 在表中常有一列或多列的组合,其值能唯一标识表…

Confluence 6 手动备份站点

2019独角兽企业重金招聘Python工程师标准>>> Confluence 被配置自动备份数据,使用压缩的 XML 格式。同时你也可以通过 Confluence 的 管理员控制台(Administration Console)手动进行备份。 你需要具有 System Administrator 权限才…