游标定义:用来操作查询的结果集,是一个用户数据缓冲区 具体描述(光标):fetch 优点:保存查询结果,以便以后使用。游标的结果集是select执行结果,需要的时候,只需一次,不用重复查询 缺点:数据缓冲区,如果游标数据量大,则会造成内存不足,所以在数量小时才使用游标 语法:游标名 cursor for select …
步骤: – 1.声明游标 declare my_cursor cursor for select * from major – 2.打开游标 open my_cursor – 3.取数据(循环) fetch next from my_cursor into – 4.关闭游标 或者 deallocate(释放游标)
案例
/* 查询mname */declare my_cursor cursorforselect mname from major
declare@mnamevarchar(20)open my_cursor
fetchnextfrom my_cursor into@mnamewhile @@FETCH_STATUS=0beginselect@mnameas'mname'fetchnextfrom my_cursor into@mnameenddeallocate my_cursor
/* 对sc表添加等级列,若学生成绩80及以上等级A,70-79分为B,其余为C,null仍为null */declare my_cursor1 cursorforselect sno,cno,grade from sc
declare@snovarchar(20)declare@cnovarchar(10)declare@gradedecimal(5,2)open my_cursor1
fetchnextfrom my_cursor1 into@sno,@cno,@gradewhile @@FETCH_STATUS=0beginif@grade>=80update sc set sc_rank ='A'where sno=@snoand cno=@cnoelseif@grade>=70update sc set sc_rank ='B'where sno=@snoand cno=@cnoelseif@grade>=0update sc set sc_rank ='C'where sno=@snoand cno=@cnofetchnextfrom my_cursor1 into@sno,@cno,@gradeenddeallocate my_cursor1
select*from sc
/* 查询所有学生的专业名和姓名 */-- 游标方法declare my_cursor2 cursorforselect sname,mname from stu leftouterjoin major on stu.mno=major.mno
declare@snamevarchar(30)declare@mnamevarchar(20)open my_cursor2
fetchnextfrom my_cursor2 into@sname,@mnamewhile @@FETCH_STATUS=0beginselect@snameas'sname',@mnameas'mname'fetchnextfrom my_cursor2 into@sname,@mnameendclose my_cursor2
-- 左外连接select*from stu
select sname,mname from stu leftouterjoin major on stu.mno=major.mno
SQL游标游标定义:用来操作查询的结果集,是一个用户数据缓冲区具体描述(光标):fetch优点:保存查询结果,以便以后使用。游标的结果集是select执行结果,需要的时候,只需一次,不用重复查询缺点:数据缓冲区,如果游标数据量大,则会造成内存不足,所以在数量小时才使用游标语法:游标名 cursor for select …步骤:– 1.声明游标declare my_cursor cursor for select * from major– 2.打开游标open my_cursor–