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 字段名1=@变量名1 whare 字段名2=@变量名2 fetch next from cur into @变量名1,@变量名2; end close cur; deallocate cur; 关闭提示 关闭确 认 取

转载于:https://www.cnblogs.com/qwiang/p/4401522.html

SQL游标使用方法SQL游标使用方法(转)相关推荐

  1. 在SQL Server中分页结果的最佳方法是什么

    如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...

  2. SQL Server遍历表的几种方法

    在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低.当然,从面向集合操作的 ...

  3. Oracle游标有何用,Oracle游标使用方法有哪些?

    在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行.显式游标只有在需要获得多行数据的情况下使用.PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法. UPDATE或D ...

  4. oracle定义变量sql赋值_ORACLE获取SQL绑定变量值的方法总结

    本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下这方面的知识点,方面日后查找.翻阅. 方法1:查询V$SQL V$S ...

  5. sql游标 while_用SQL Server中的排名函数替换SQL While循环和游标,以提高查询性能

    sql游标 while SQL While loop and cursor are the most common approach to repeat a statement on conditio ...

  6. PL/SQL程序设计 第四章 游标的使用

    在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现. §4.1 游标概念 为了处理 SQL 语句,ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的 ...

  7. SQL server 游标(只进游标)讲解

    游标概念: SQL的游标是一种临时的数据库对象,既可以存放储存在数据库表中数据行的副本,也可以指向储存在数据库中的数据行的指针,游标提供了在逐行的基础上操作表中数据的方法. 游标的作用: 1.定位到结 ...

  8. SQL获取当月天数的几种方法

    SQL获取当月天数的几种方法 原文:SQL获取当月天数的几种方法 日期直接减去int类型的数字 等于 DATEADD(DAY,- 数字,日期) 下面三种方法: 1,日期加一个月减去当前天数,相当于这个 ...

  9. oracle游标声明中使用变量赋值,Oracle游标使用方法(游标里使用变量绑定)

    来源:http://www.jzxue.com/shujuku/oracle/200910/01-2839.html 游标(CURSOR)也叫光标,在关系数据库中经常使用,在PL/SQL程序中可以用C ...

  10. sql 游标_SQL基础丨游标

    游标 游标是一个重要的概念,提供了一种灵活的操作方式,可以从数据结果集中每次提取一条数据记录进行操作. 在SQL中,游标是一种临时的数据库对象,可以指向存储在数据库中的数据行指针. 示例 -查询her ...

最新文章

  1. gram矩阵_ZEN-基于N-gram的中文Encoder
  2. “ static”关键字在课程中做什么?
  3. Http Hijacker
  4. Fragment 退出动画导致fragment退出失败问题(罕见问题)
  5. python后端开发工程师做什么-如何面试Python后端工程师?
  6. 北斗导航 | 完全自主研发国产高端三维激光雷达助力中国测绘技术发展
  7. Linux中的Interrupted system call错误
  8. Docker 验证 Centos7.2 离线安装 Docker 环境
  9. 采用C编写程序实现从文件读取操作
  10. MySQL的安装与连接方法
  11. 复制粘贴之后出现问号怎么办_网页没办法复制粘贴?老司机传授这3招太赞了,全网任意免费复制...
  12. JFinal开发8个常见问题
  13. MyBatis数据输出
  14. 2022年第十三届蓝桥杯省赛--难度评价
  15. 【备忘】LAMP兄弟连李明老师讲Linux[更新完毕-共享完毕]
  16. html让视频自动循环播放,javascript – HTML5视频 – 如何进行无缝播放和/或循环播放多个视频?...
  17. wps编号无法继续_wps的多级编号出问题了
  18. [gdc13]dx11效率优化
  19. 灵飞经4 西城八部 第二十章 倒行逆施(三)
  20. Excel快速入门02

热门文章

  1. es算法matlab编程,matlab练习程序(演化策略ES)
  2. 疯子的算法总结(四)贪心算法
  3. Linux16.04配置tensorflow(GPU源码编译)并深入了解tensorboard
  4. Windows驱动开发VXD/WDM/WDF/DDK/WDK的联系和区别
  5. VxWorks下Shell调试总结
  6. C++笔记——指针数组/数组指针
  7. Detectron2学习笔记
  8. alexnet vgg_从零开始:建立著名的分类网2(AlexNet / VGG)
  9. 使用Hexo搭建博客步骤详解
  10. 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作