zoukankan      html  css  js  c++  java
  • SQL Server 2008 游标使用实例

    本文使用以下两张数据库表作为演示对象。

    游标初探--使用游标进行遍历

    declare @classAndStudent table(
      class_id int,                  --班级ID
      class_name nchar(10),          --班级名称
      teacher nchar(10),             --教师
      id int,                        --学生ID
      name nchar(10),                --学生名称
      age int                        --学生年龄
    );
    
    declare @ClassId int;                --班级ID
    declare @ClassName nchar(10);        --班级名称
    declare @Teacher nchar(10);          --教师
    declare @Id int;                     --学生ID
    declare @Name nchar(10);             --学生名称
    declare @Age int;                    --学生年龄
    
    insert into @classAndStudent   
    select t1.classid,t1.classname,t1.teacher,t2.id,t2.name,t2.age from tb_Class t1,tb_Student t2 where t1.classid =t2.classid
    
    declare @cursor cursor;--游标
    set @cursor=cursor for 
    select class_id,class_name,teacher,id,name,age from @classAndStudent;	
    open @cursor
    fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;
    while @@FETCH_STATUS=0
    begin
      if(@Age<20 and @Teacher='wsp')
      begin
         update tb_Student set classid=1 where id=@ID
      end
      fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;
    end
    close @cursor
    deallocate @cursor	
    


    先简单解释一下上面代码到底做了些什么事。

    代码一开始定义表类型变量@classAndStudent,用来保存学生与班级的信息,随后使用游标来遍历表变量(http://support.microsoft.com/?kbid=305977)@classAndStuden,在遍历过程中,将学生年龄小于20,且教师名称为“wsp”的学生的班级置为1

    接下来,对游标的使用做简单的说明。

    1)声明游标:确定游标的属性,制定游标的查询结果集。

    declare @cursor cursor;--游标
    set @cursor=cursor for 
    select class_id,class_name,teacher,id,name,age from @classAndStudent;	
    

    2)打开游标:编译sql server定义游标的select语句,并行成结果集。

    open @cursor

    3)获取数据:通过游标以行的单位从结果集中获取数据。

    fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;

    4)关闭游标:停止处理查询。

    close @cursor

    5)释放游标:释放分配给游标的所有存储资源。

    deallocate @cursor

    查看执行结果:

    select * from @classAndStudent
    select * from tb_Student
    

    结果为:

    游标进阶--游标嵌套

    简单修改上面的代码,即可以完成游标嵌套操作。

    增加以下变量的声明。

    declare @subcursor cursor;--子游标
    declare @subClassID int;
    

    修改if(@Age<20 and @Teacher='wsp')条件下的代码。

    if(@Age<20 and @Teacher='wsp')
    begin	
       set @subcursor=cursor for select t.class_id from tb_class t where t.class_id=@ClassId
       open @subcursor
       fetch next from @subcursor into @subClassID
       while @@FETCH_STATUS=0
       begin
         --做你想做的
         --是男人,想做就做呗
       fetch next from @subcursor into @subClassID
       end
       close @subcursor
       deallocate @subcursor
    End
    

    这里其实就是新增了一个游标@subcursor来遍历表tb_class的class_id而已。没什么好难解释的了,再说例子中也没有给出具体的实际操作,仅给出了游标嵌套的代码架子而已,在实际代码中大家可以灵活变更。

  • 相关阅读:
    Java排序算法总结(转载)
    Java基础—数组(转载)
    Java基础—注解(转载)
    Java基础—枚举
    JVM虚拟机—JVM的类加载机制
    三,memcached服务的两种访问方式
    二,windows下安装memcached服务
    一,memcached的基本概念
    七,apache配置域名
    六,apache修改默认根文件路径
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3366217.html
Copyright © 2011-2022 走看看