查看学生实验报告中游标的使用,大部分同学对@@FETCH_STATUS含义没有搞清楚,在此做以说明。
概念
@@fetch_status是SQLServer的一个全局变量,其值由数据库管理系统管理,值的改变是通过fetch next from触发的
记录值有三种,分别为
0 FETCH 数据提取成功
-1 FETCH 没取到数据,游标中的数据已经取完
-2 被提取的行不存在,进程被杀、意外中断
问题
很多同学代码写成这样
declare @name varchar(30)
declare @sname varchar(100)
declare @cno varchar(100)
declare @grade varchar(100)
declare test_cursor cursor for select * from dbo.Table_A
open test_cursor
fetch test_cursor into @sname,@cno,@grade
while (@@FETCH_STATUS =0)
begin
-- if(@sname ='李四')
-- break
print @sname+ ' ' + @cno+' '+@grade
fetch test_cursor into @sname,@cno,@grade
end
print @@FETCH_STATUS --循环执行完后,@@FETCH_STATUS一定不等于-1
if(@@FETCH_STATUS !=0)
print '找不到数据'
close test_cursor
deallocate test_cursor
最后的执行结果一定是执行到这一句
print '找不到数据'
如果加上下面一句
if(@sname ='李四')
break
当数据库中存在李四数据时,break语句执行后下一条fetch语句尚未执行,跳出循环@@FETCH_STATUS =0才成立