博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 初识游标
阅读量:5073 次
发布时间:2019-06-12

本文共 1953 字,大约阅读时间需要 6 分钟。

---恢复内容开始---

   

  游标:游标是一种能从包含多个数据的结果集每次提取一条的机制

 

    游标的特点是: 

      •  检索得到的数据集更加灵活
      •  可有针对性的对数据进行操作
      •  拥有对数据进行删除和更新的能力 

    为何使用游标: 

      • 游标提供了一种比较好的解决方案,可以将批操作变成行操作。 

    游标的步骤

    1.    定义游标
    2.    打开游标
    3.    使用游标
    4.    关闭游标
    5.    删除游标

    代码详解:

 

      1. 定义游标

        DECLARE  游标名  [ INSENSITIVE ] [ SCROLL ] CURSOR           FOR T-SQL 语句

 

      2. 打开游标

         OPEN 游标名

      

      3.  使用游标

        FETCH               [ NEXT | PRIOR | FIRST | LAST                    | ABSOLUTE { n | @nvar }                    | RELATIVE { n | @nvar }                ]               FROM  游标名          into 给局部变量赋值            
          ps 只有在定义游标时设置为SCROLL , 才可使用除 NEXT 其他标签

      4. 关闭游标

        CLOSE 游标名

 

      5. 删除游标

  DEALLOCATE 游标名

 

      

示例:

 

  前提:     表 stuscore 

       表内数据:

          

 

  目的:   将表改成如图形式

      

 

    代码     

        /*定义局部变量,用于存储sql语句*/       declare @sql varchar(max)      set @sql='select distinct( sname )'        /*定义游标使用的的局部变量*/      declare @cname varchar(20)        /*定义游标*/      declare cur_stuscore cursor read_only for select distinct(cname) from stuscore        /*打开游标*/      open cur_stuscore        /*使用游标*/      fetch next from cur_stuscore into  @cname        /*使用while循环,使语句遍历整表*/      while(@@FETCH_STATUS=0)        begin            set @sql=@sql+',(select s.score from stuscore s where s.cname='''+@cname+''' and s.sname=t.sname)as '''+@cname+''''            fetch next from cur_stuscore into  @cname        end        /*更新SQL语句*/      set @sql=@sql+' from stuscore t'        /*执行SQL语句*/      exec (@sql)        /*关闭游标*/      close cur_stuscore        /*删除游标*/      deallocate cur_stuscore ps:   SQL执行语句为:        select distinct( sname ),
     (select s.score from stuscore s where s.cname='语文' and s.sname = t.sname) as '语文',

      (select s.score from stuscore s where s.cname='数学' and s.sname = t.sname) as '数学',

       (select s.score from stuscore s where s.cname='英语' and s.sname = t.sname) as '英语' 

     from stuscore t

转载于:https://www.cnblogs.com/ang-664455/p/7096717.html

你可能感兴趣的文章
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>