• 从零开始学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的一个高级语法。当然游标还有进阶的内容,也将在之后推出,如果有兴趣学习,可以继续留意,加油。

    图片名称
  • 相关阅读:
    什么是子网掩码?(转)
    测试LM414-IOT网关MQTT功能
    连接s7-200时,提示未找到指定的访问点
    github中文件夹后面跟@+数字什么意思?为什么git clone下来里面是空的?
    Java知识32 数据结构 枚举 向量【多测师】
    java知识31 void 、实例化对象后面带参数、 实例变量(重点)【多测师】
    Java知识30 package【多测师】
    Java知识29 接口【多测师】
    java知识28 Java封装【多测师】
    Java知识27 抽象类【多测师】
  • 原文地址:https://www.cnblogs.com/LY-CS/p/14441530.html
Copyright © 2020-2023  润新知