SQL Server 2008 游标使用实例

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

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

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

结果为:

2  游标进阶 -- 游标嵌套

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

增加以下变量的声明。

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而已。没什么好难解释的了,再说例子中也没有给出具体的实际操作,仅给出了游标嵌套的代码架子而已,在实际代码中大家可以灵活变更

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值