SQLServer@@FETCH_STATUS含义

查看学生实验报告中游标的使用,大部分同学对@@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才成立

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值