SQL游标使用方法SQL游标使用方法(转)

1. 为何使用游标:    使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。   

2. 如何使用游标:    一般地,使用游标都遵循下列的常规步骤:    (1) 声明游标。把游标与T-SQL语句的结果集联系起来。    (2) 打开游标。    (3) 使用游标操作数据。    (4) 关闭游标。   

2.1. 声明游标    DECLARE CURSOR语句SQL-92标准语法格式:    DECLARE 游标名 [ INSENSITIVE ] [ SCROLL ] CURSOR    FOR sql-statement    Eg:    Declare MycrsrVar Cursor    FOR Select * FROM tbMyData   

2.2 打开游标    OPEN MycrsrVar    当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1行数据,必须移动行指针使其指向第1行。就本例而言,可以使用下列操作读取第1行数据:    FETCH FIRST from E1cursor    或 FETCH NEXT from E1cursor      

2.3 使用游标操作数据    下面的示例用@@FETCH_STATUS控制在一个WHILE循环中的游标活动    /* 使用游标读取数据的操作如下。*/    DECLARE E1cursor cursor /* 声明游标,默认为FORWARD_ONLY游标 */    FOR SELECT * FROM c_example    OPEN E1cursor /* 打开游标 */    FETCH NEXT from E1cursor /* 读取第1行数据*/    WHILE @@FETCH_STATUS = 0 /* 用WHILE循环控制游标活动 */    BEGIN    FETCH NEXT from E1cursor /* 在循环体内将读取其余行数据 */    END    CLOSE E1cursor /* 关闭游标 */    DEALLOCATE E1cursor /* 删除游标 */     declare @id int,@name varchar(20);   declare cur cursor fast_forward for      select id,name from a;   open cur;   fetch next from cur into @id,@name;   while @@fetch_status=0   begin       --做你要做的事       fetch next from cur into @id,@name;   end   close cur;   deallocate cur;

  

2.4 关闭游标    使用CLOSE语句关闭游标    CLOSE { { [ GLOBAL ] 游标名 } | 游标变量名 }      使用DEALLOCATE语句删除游标,其语法格式如下:    DEALLOCATE { { [ GLOBAL ] 游标名 } | @游标变量名       3. FETCH操作的简明语法如下:       FETCH    [ NEXT | PRIOR | FIRST | LAST]    FROM    { 游标名 | @游标变量名 } [ INTO @变量名 [,…] ]      参数说明:    NEXT 取下一行的数据,并把下一行作为当前行(递增)。由于打开游标后,行指针是指向该游标第1行之前,所以第一次执行FETCH NEXT操作将取得游标集中的第1行数据。NEXT为默认的游标提取选项。    INTO @变量名[,…] 把提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标选择列表中的列的数目一致。

   --------------------------------------------------------------------------------------------------------------------------------

  每执行一个FETCH操作之后,通常都要查看一下全局变量@@FETCH_STATUS中的状态值,以此判断FETCH操作是否成功。该变量有三种状态值:    · 0 表示成功执行FETCH语句。    · -1 表示FETCH语句失败,例如移动行指针使其超出了结果集。    · -2 表示被提取的行不存在。   由于@@FETCH_STATU是全局变量,在一个连接上的所有游标都可能影响该变量的值。因此,在执行一条FETCH语句后,必须在对另一游标执行另一FETCH 语句之前测试该变量的值才能作出正确的判断。   Declare @变量名1 变量类型1 Declare @变量名2 变量类型2 declare cur cursor fast_forward for select 字段名1,字段名2 from 表名1; open cur; fetch next from cur into @变量名1,@变量名2; while @@fetch_status=0 begin update 表名2 set 字段名[email protected]变量名1 whare 字段名[email protected]变量名2 fetch next from cur into @变量名1,@变量名2; end close cur; deallocate cur; 关闭提示 关闭确 认 取

时间: 2024-10-13 03:36:16

SQL游标使用方法SQL游标使用方法(转)的相关文章

PL/SQL 编程(二)游标、存储过程、函数

游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段. 可以将游标形象的看成一个变动的光标,他实质上是一个指针,在一段Oracle存放数据查询结果集或者数据操作结果集的内存中,这个指针可以指向结果集任何一条记录. 游标分静态游标和REF游标两类,静态游标包含显式游标和隐式游标. 显式游标: 在使用之前必须有明确的游标声明和定义,这样的游标定义会关联数据查询语句,通常会返回一行或多行.打开游标后,用户可以利用游

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

SQL Server遍历表的几种方法

在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低.当然,从面向集合操作的角度出发,也有两种方法可以进行遍历表的操作,总结起来,遍历表有下面几种方法. 使用游标 使用表变量 使用临时表 我的需求是:针对HR.Employees表,新增一列fullname,并取值firstname+lastname. -- 需求是,新增一列fullname,取值firstname+last

SQL Server遍历表的几种方法 转载

SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低.当然,从面向集合操作的角度出发,也有两种方法可以进行遍历表的操作,总结起来,遍历表有下面几种方法. 使用游标 使用表变量 使用临时表 我的需求是:针对HR.Employees表,新增一列fullname,并取值firstname+lastn

SQL Server中解决死锁的新方法介绍

SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的SQL语句放在两个不同的连接里面,并且在5秒内同时执行,将会发生死锁. <ccid_nobr> <ccid_code>use Northwindbegin tran insert into Orders(CustomerId) values(@#[email protected]#)

游标和动态SQL

游标类别:静态游标(指在编译的时候,游标就与一个select语句进行了静态绑定的游标.这样的游标仅仅能作用于一个查询语句)和动态游标(就是希望我们的查询语句在执行的时候才跟游标绑定.为了使用动态游标,必须声明游标变量). 动态游标分两种,各自是强类型和弱类型.强类型的动态游标仅仅能支持查询结果与他类型匹配的这样的查询语句.弱类型的动态游标能够支持不论什么的查询语句. 静态游标分为两种,隐式游标和显示游标.显示游标是实用户声明和操作的一种游标.隐式游标是Oracle为全部的数据操作语句自己主动声明

Sql server2005 优化查询速度50个方法小结

Sql server2005 优化查询速度50个方法小结 Sql server2005优化查询速度51法查询速度慢的原因很多,常见如下几种,大家可以参考下. I/O吞吐量小,形成了瓶颈效应.  没有创建计算列导致查询不优化.  内存不足.  网络速度慢.  查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).  锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷).  sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.  返回了不必要的行和列.  查询语句不好,没有

Sql Server 2008 R2 数据库脚本导出方法

经常忘记怎么搞,截几张图记录一下. 1 选中要导出的数据库,右键->任务->生成脚本 2 3 4 查看保存的脚本 Sql Server 2008 R2 数据库脚本导出方法,布布扣,bubuko.com

安装SQL SERVER开启SA用户登录的方法

家庭安装SQL SERVER开启SA用户登录的方法:(切记按照网址操作完后,最后一定要在"管理工具"的"服务"里把"SQL SERVER(MSSQL SERVER)"停用一次后再启动,否则依旧无法使用SA登录) 在新安装SQL,用SA用户登录数据库的时候出现如下的错误: 之前装过SQL7.0, SQL2000, SQL2005版的.2008版的,好像没有这复杂啊,百度了下找到了一个解决方案,归纳一下:这个错误一般由三个原因引起,登录方式设置错误.

ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍

如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者其他. 1.创建序列 Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE 权限 CREATE SEQUENCE CUX_DEMO_SEQUENCEMINVALUE 1MAXVALUE 99999999999START WITH 1000