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(…

C# 数值和字符串之间的相互转换

文章目录方法用例ToString()方法Parse()方法博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 方法 ToString()方法:数值类型的 ToString(&#xff…

LeetCode Reverse Words in a String III

原题链接在这里:https://leetcode.com/problems/reverse-words-in-a-string-iii/#/description 题目: Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial wo…

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

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

kali开启ssh

修改 vi /etc/ssh/sshd_config 1.将 permitrootlogin 前面的注释去掉,并且后面改为yes 如果没有则添加permitrootlogin yes 2.将#PasswordAuthentication no的注释去掉,并且将NO修改为YES //kali中默认是yes 3.按Esc , 同时按shift和冒号键 ,输入wq ,回…

C# 引用类型与值类型转换-装箱和拆箱

文章目录简介用例装箱拆箱博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 拆箱就是把 “引用” 类型转化为 “值” 类型; 装箱就是把 “值” 类型转化为 “引用” 类型; 装箱与拆箱是数据类型转换的一种特殊应用…

XVID基本参数解析

XVID,X264等是MPEG4、H264标准的开源编码器,其中X264只有编码部分,解码部分需要FFMPEG完成;XVID有编解码部分,其中解码亦可以利用FFMPEG中的MPEG4完成解码。视频压缩算法的计算复杂度,都是比较高的。其中具…

自己整理的openresty安装步骤

这几天一直在研究对webapi的限流和名单的问题,于是看了开涛博客的方案,于是就用到了openresty,一个把Nginx和lua集成的东西。 下面就是整理的安装方案(简单使用基本可以这么安装) 下载openresty(centos上下…

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

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

C#赋值运算符及解析

文章目录博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 赋值运算符对运算符右边的操作式求值,并用该值设置运算符左边的变量操作式。赋值运算符主要有简单赋值及复合赋值运算符;可以放在赋值运算符左边的对象类型是变量…

mysql 案例 ~ pt修复工具的使用

简介:今天咱们来聊聊PT修复工具pt-table-sync 注意事项: 1 表要有主键或者唯一键 2 针对每一个chunk加的是for update锁 3 修复过程中不能容忍从库延迟 如果从库延迟太多,pt-table-sync会长期持有对chunk的for update锁,然后等待从库的…

mpeg2,mpeg4,h264编码标准的异同

1、宏块匹配像素精度: MPEG2中,运动估计的精度是1/2的像素,通过线性插值实现(可能有简单修正); H264和MPEG4 都可以支持1/4像素的精度 2、参考帧的数量:MPEG2,MPEG4的P帧只能有一帧…

四十岁学编程(一)

有时想想,人生还真的是曲折,人到中年了,我才开始学编程。 这一学,就是三年多,我居然坚持了下来。 更没想到的是,三年后的我居然有勇气投简历求职前端,虽然面试前战战兢兢。 很多时候&#xff0c…

01_SQlite数据库简介

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

GNU Make 使用手册(中译版)

翻译:于凤昌译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构、理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级的Makefile文件。目前,在网上虽然有一些著作,但都不能全面的解释Linux源代码中各…

基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...

1.多进程实现方式(类似于多线程) 1 import multiprocessing2 import time,threading3 4 def thread_run():#定义一个线程函数5 print("我是子线程%s" %threading.get_ident()) #threading.get_ident()函数获取当前线程的id6 def run(name…

C#比较运算符及解析

文章目录博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 比较运算符得出的结果是逻辑型(bool),即 True 或 False 。 比较运算符又称关系运算符,我们可以把它理解为一种判断,判断的结果…

开发人员MySQL调优-理论篇

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

Java基础之反射机制

Java反射机制 反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为ja…