游标操作的六步骤:
◆在每次在创建游标的时候都问问自己,用什么别的方法可以避免使用游标,那么你就步如设计的正规了.
1.声明
2.打开
3.应用/操作
4.关闭.
5.释放
声明游标的基本语法如下:
Declare <cursor name> cursor
For <select statement>
案例1: MySchool
if exists(select*from sysobjectswherename='cursc')
drop proc cursc
Go
create procedure cursc
as
declare
@question varchar(210), --我们必须声明变量来存放得到的记录
@a varchar(50),
@b varchar(50),
@c varchar(50),
@d varchar(50),
@answer varchar(50),
@num int
declare MyCursor cursor --声明我们的游标
Global --全局游标的范围还有一个是局部(Local)
for select question,OptionA,OptionB,OptionC,OptionD,Answerfrom question --对应的SQL语句后面打开游标就是打开
set @num=1--设置标量表示游标的移动
open MyCursor --打开我们的游标这实际执行了For从句的主体查询,但我们仍然没有将数据
--放在合适的位置进行合适的处理,因此我们需要处理一组事情.
--1.获取第一条理路或者Fetch
--2.根据需要,循环剩余记录
fetch next from MyCursor into @question,@a,@b,@c,@d,@answer
--首先生成第一条Fetch(提取)--该命令说明了希望提取一条特定的的记录,得到的记录由变量接受
print '第'+cast(@numasvarchar)+'个问题:'+' 答案A是'+@a+' 答案B是'+@b+' 答案C是'+@c+' 答案D是'+@d++' 正确答案是'+@answer
--对得到的记录进行对应操作(第一次) --如果忘了再这里进行操作那么会少操作一行数据
while (@@fetch_status=0) --@@fetch_status全局变量,每次提取一行,该变量就更新一次
--并告诉我们提取工作进展到了哪一步.他可能值为以下项
--□ 0:提取成功,一切进展顺利 ||语句成功
--□ -1:提取失败或此行不在结果集中,超出了游标中的最后一行(或在第一行之前) ||Fetch语句失败或行不在结果集中
--□ -2:提取失败,被提取的行不存在,因为记录丢失(不是循环到了末尾,而是因为在游标打开时已经删除了该记录) ||提取的行不存在
begin
select @num=@num+1
fetch next from MyCursor into @question,@a,@b,@c,@d,@answer
--上面的fetch进行操作一行数据 那么循环也要进行操作记住有次fetch和2次操作语句块
print '第'+cast(@numasvarchar)+'个问题:'+' 答案A是'+@a+' 答案B是'+@b+' 答案C是'+@c+' 答案D是'+@d++' 正确答案是'+@answer
end
close MyCursor --关闭游标
deallocate MyCursor --释放游标
基本操作上面案例已经很清楚了
http://blog.csdn.net/chenweitang123/article/details/5588968