zoukankan      html  css  js  c++  java
  • 从零开始学SQLSERVER-游标CURSOR(基础)

    导学

     游标算是SQLSERVER里面的进阶知识了,第一眼看了可能觉得复杂,这是正常的,但是其实游标有固定的格式,记住格式之后就简简单单了,让我们开始吧!

    图片名称

    游标的作用

     以前我们获取数据的方式是通过SELECT * FROM XX获取,而这样的结果是数据库一次性输出一张表,但是如果我们想要数据库一行一行的输出结果呢?
     这时候游标的作用就凸显出来了,游标可以让数据库一行一行的输出结果。但是我们用游标的根本原因并不是仅仅让它一行一行输出,我们可以在它逐行输出的同时,可以加上我们的处理,比如符合要求的行保留,不符合则剔除之类,而这就是游标的用法,而这就类似于对数据库查询结果的遍历。如果还不清楚我们可以继续往下看代码和例子。

    图片名称

    游标的代码

     游标的代码,第一次看很繁琐,但是实际上就是一个模板而已,用的时候复制一下就行,看一眼之后可以往下看例子。

    DECLARE 游标名 CURSOR FOR       --这里声明游标,标注游标的名字
    SELECT 列1,列2 FROM ...     --这个是游标处理的语句和数据源,也就是用游标对这个查询结果进行一行一行的处理。
    OPEN 游标名                         --开启游标
    
    DECLARE @变量1 变量类型 --用于接收游标的获取值,这里对应SQL语句中,获取的列的数量,获取几个列的数量就声明几个变量。
    DECLARE @变量2 变量类型 --用于接收游标的获取值,这里对应SQL语句中,获取的列的数量,获取几个列的数量就声明几个变量。
    
    FETCH NEXT FROM 游标名 INTO @变量1,@变量2 --游标开始遍历一行,并把数据保存到@变量1,@变量2,......中,这里的顺序需要对应select中列的顺序。
    WHILE @@FETCH_STATUS = 0 -- @@FETCH_STATUS这个变量用于判断是否正常获取数据,如果能正常获取数据,则结果为0,则继续执行游标遍历语句,当数据获取异常的时候,结束遍历。
      BEGIN
        ... --这里用于对数据的处理,主要的数据判断处理操作就是在这里进行。
        FETCH NEXT FROM 游标名 INTO @变量1,@变量2 --游标继续遍历
      END
    
    CLOSE 游标名       --关闭游标
    DEALLOCATE 游标名  --删除游标
    

     上面的格式就是最简单的游标格式,也是最常用的游标格式,记住上面的就能解决大部分的问题,接下来我们继续进行讲解,同时介绍一些例子。

    图片名称

    游标的示例

    先准备一张数据表

    CREATE TABLE Students
    (
    name  VARCHAR(20) ,
    class VARCHAR(20) ,--需要多少列,就添加多少行
    )
    
    INSERT INTO Students VALUES('张三', '五班')
    INSERT INTO Students VALUES('李四', '四班')
    INSERT INTO Students VALUES('王五', '一班')
    
    name class
    张三 五班
    李四 四班
    王五 一班

     需求:
     如果是五班的同学,则输出姓名,并标注为‘全英班’,不是五班的则输出名字并修改为‘传统班’。
     这时候我们用游标就可以这样处理:

    DECLARE student_cursor CURSOR FOR --声明一个名字为student_cursor的游标
    SELECT name,class from Students   --遍历的SQL语句
    OPEN student_cursor              --打开游标
    DECLARE   @name varchar(20)      --声明名字为name,类型为字符型的变量。
    DECLARE   @class varchar(20)     --声明名字为class,类型为字符型的变量。
    FETCH NEXT FROM student_cursor INTO @name,@class  --获取student_cursor的一条数据,其中为两个字段分别赋值给@name,@class
    WHILE @@FETCH_STATUS=0 --假如检索到了数据继续执行游标,如果没有数据则判断失效,结束遍历
    BEGIN
      IF @class = '五班' --判断,如果班级字段等于五班,则输出全英班,不等于则输出传统班
        PRINT('全英班')
      ELSE 
        PRINT('传统班')
      PRINT(@name) 
      FETCH NEXT FROM student_cursor INTO @name,@class --获取下一条数据并赋值给变量
    END
    CLOSE student_cursor      --关闭游标,但是还存在游标这个变量
    DEALLOCATE student_cursor --删除游标
    

    执行结果:

    全英班
    张三
    传统班
    李四
    传统班
    王五
    

     当你能成功理解和运行上述代码的时候,就说明你已经掌握了游标常用的使用场景,也掌握了SQLSERVER的一个高级语法。当然游标还有进阶的内容,也将在之后推出,如果有兴趣学习,可以继续留意,加油。

    图片名称
  • 相关阅读:
    Windows JScript 在 游览器 中运行 调试 Shell 文件系统
    autohotkey 符号链接 软连接 symbolink
    软链接 硬链接 测试
    SolidWorks 修改 基准面 标准坐标系
    手机 路径 WebDAV 映射 驱动器
    Win10上手机路径
    explorer 命令行
    单位公司 网络 封锁 屏蔽 深信 AC
    cobbler自动化部署原理篇
    Docker四种网络模式
  • 原文地址:https://www.cnblogs.com/LY-CS/p/14441530.html
Copyright © 2011-2022 走看看