SQL中游标的使用
一般情况下,我们用SELECT这些查询语句时,都是针对的一行记录而言,
如果要在查询分析器中对多行记录(即记录集)进行读取操作时,则需要使用到游标或WHILE等循环
游标的类型:
1、静态游标(不检测数据行的变化)
2、动态游标(反映所有数据行的改变)
3、仅向前游标(不支持滚动)
4、键集游标(能反映修改,但不能准确反映插入、删除)
游标使用顺序:
1、定义游标
2、打开游标
3、使用游标
4、关闭游标
5、释放游标
Transact-SQL:
declare 游标名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS]
for selet语句 [for update[of 列名[,列名]]
注:LOCAL 局部游标 GLOBAL 全局游标
FORWARD_ONLY 仅向前 SCROLL 滚动
STATIC 静态 KEYSET 键集 DYNAMIC 动态
READ_ONLY 只读 SCROLL_LOCKS 锁定游标当前行 获取游标的数据
FETCH [[NEXT | PRIOR | FIRST | LAST |
ABSOLUTE{ n | @nvar | RELATIVE { n | @nvar}]
From ] 游标名 [into 变量]
注:
NEXT 下一行 PRIOR 上一行 FIRST 第一行
LAST 最后一行 ABSOLUTE n 第n行
RELATIVE n 当前位置开始的第n行
into 变量 把当前行的各字段值赋值给变量 游标状态变量:
@@fetch_status 游标状态
0 成功 -1 失败 -2 丢失
@@cursor_rows 游标中结果集中的行数
n 行数 -1 游标是动态的 0 空集游标
操作游标的当前行:
current of 游标名
例1:利用游标对查询的数据集进行遍历
use pubs go declare @auid char(12),@aulname varchar(20),@aufname varchar(20), @st char(2),@auinfo varchar(50) declare auth_cur cursor for select au_id, au_lname, au_fname, state from authors open auth_cur fetch next from auth_cur into @auid,@aulname,@aufname, @st while (@@fetch_status=0) begin print '作者编号: '+@auid print '作者姓名: '+@aulname+','+@aufname print '所在州: '+@st print '--------------------------' fetch next from auth_cur into @auid,@aulname,@aufname, @st end close auth_cur deallocate auth_cur
例2:利用游标修改、删除数据
declare auth_cur cursor scroll for select au_id, au_lname, au_fname, state from authors for update of au_lname open auth_cur declare @rowcount int set @rowcount = 6 fetch absolute @rowcount from auth_cur --将变量@rowcount标识的行设置为当前行 --下面1行是利用游标进行修改操作 update authors set au_lname='张' where current of auth_cur --修改游标中的当前行 --下面1行是利用游标进行删除操作 delete from authors where current of auth_cur
SQL中游标的使用的更多相关文章
- SQL中游标的使用--遍历数据逐行更新或删除:相当于for循环
--------------------------------------例子1 单纯的游标-------------------------------- create TABLE Table1 ...
- SQL中游标的用法
游标:是用来对表从上下每行循环取值,将值连接成为字符串.例子:对 pubs 数据库的dbo.titles 表.1.取得表中的总价格:select sum(price) from dbo.titles2 ...
- SQL中游标的使用(转)
http://www.cnblogs.com/tianguook/archive/2011/03/09/1977987.html 一般情况下,我们用SELECT这些查询语句时,都是针对的一行记录而言, ...
- SQL中游标的使用示例
declare @email_source varchar(MAX); --1.原始发件人字段 declare @key_name varchar(50); --2.我方卷号或客户代码 declare ...
- 对SQL中游标的认识
游标用于按顺序遍历结果集.但一般情况下,应尽量避免使用游标.原因: 1. 游标违背了关系模型,即按集合来考虑问题的思想: 2. 游标逐行对纪录进行操作,会带来额外的开销,使用游标的解决方案通常比使用集 ...
- Oracle存储过程中游标的简单使用
存储过程中查询语句如何返回多行结果? 我们知道,如果存储过程中查询语句有多行结果输出,会报错:ORA-01422: exact fetch returns more than requested nu ...
- SQL Server中游标的使用
举个栗子: -- 临时变量 DECLARE @Id UNIQUEIDENTIFIER -- 声明游标名 DECLARE cursor_name CURSOR FOR SELECT ID from CO ...
- MySQL/MariaDB中游标的使用
本文目录:1.游标说明2.使用游标3.游标使用示例 1.游标说明 游标,有些地方也称为光标.它的作用是在一个结果集中逐条逐条地获取记录行并操作它们. 例如: 其中select是游标所操作的结果集,游标 ...
- mysql中游标的使用案例详解(学习笔记)
1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行.我给大家准备一张图: 2.怎么使 ...
随机推荐
- ping and traceroute(tracert)
1.ping程序简单介绍 这个程序是Mike Muuss编写的.目的是測试另外一台机子是否可达. 运用的协议就是ICMP.运用的是ICMP的回显应答和请求回显两个类型.曾经呢.能ping通说明可以进行 ...
- php模拟HTTP协议发送post请求方法
今天用到php模拟http发送post请求记录 代码如下: <?php $url = 'xxxx.com'; $data = 'a=one&b=two'; $data = urlenco ...
- Python开发【第十篇】:CSS --无内容点击-不进去(一)
Python开发[第十篇]:CSS --无内容点击-不进去(一)
- jQueryUI 日期控件
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...
- (转)ECSHOP给分类添加代表图
转之--http://www.cnblogs.com/wangblognet/archive/2012/12/09/2809916.html ecshop的模板有很多不完善的地方,比如添加商品分类的时 ...
- (转)一步一步学习PHP(3)——函数
相信每个人在学习PHP之前至少都有着一定的C语言,或者是C++/Java/C#等其他语言的基础,所以在这里也不从头开始说起,只是来谈谈PHP方法的独特之处. 1. 方法概述 首先,写一个最简单的函数, ...
- sql plus 和 pl/sql无法连接远程oracle数据库
前言:安装完oracle客户端后,可能会出现sql plus 和 pl/sql无法连接远程oracle数据库的情况,可能是以下原因: 针对sql plus连接不上: 1 可能原因:之前安装过oracl ...
- 你好,C++(39)6.4.4 依葫芦画瓢:用C++表达设计结果(下)
6.4.4 依葫芦画瓢:用C++表达设计结果 完成上面的分析与设计之后,小陈感觉已经成竹在胸胜利在望了.他知道,只要完成了程序中的类以及类之间关系的分析和设计,整个程序就相当于已经完成了一大半.接下 ...
- Asp.net的IP地址屏蔽功能设计
"IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开." 由此我们了解到,IP地址实际上是一个32位正整数,在C#中可以使 ...
- 解决 Ubuntu15.04 登陆界面无限循环 的问题
本人新手,在学习linux 安装NVIDIA 驱动的时候出现了一个奇怪的问题:登陆界面输入正确的账户密码,短暂闪烁后又返回了登陆界面.经查阅多种资料,已解决此问题 以下内容来自:http://blog ...