SQL数据库里的游标如何来控制?如何达到条件时退出游标,这个条件如何来写?

展工匠 2009-12-01 11:22:09
下面是我写的代码:
Declare @visitl_jrxiaofei int
Declare @visitl_lszxiaofei int

--declare cur_authors cursor for select au_lname,au_fname from authors for update

Declare myCursor Cursor For Select top 500 visitl_jrxiaofei,visitl_lszxiaofei From visitl_user--定义游标并定义条件

Open myCursor --打开游标
Fetch next From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei --开始抓第一条数据
While @@fetch_status=0
--如果数据集里一直有数据
Begin
Update visitl_user Set visitl_lszxiaofei=@visitl_lszxiaofei+1,[visitl_jrxiaofei]=@visitl_jrxiaofei+1
Fetch NEXT From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei --跳到下一条数据
Begin --这里我想做到的是在这里判断游标的位置,当游标到达第450条数据时关闭游标,上面的表不再进行更新数据
If @@fetch_status=3
close myCursor
End
End

Close myCursor --关闭游标
Deallocate myCursor --删除游标



这样应该如何去实现,上面的代码系统没有示出错,但是出现的问题是把整张表里的数据全部都更新了,没有达到我想要的只更新前面的450条数据的效果!
另外请教下,游标如何返回出数据?
...全文
677 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Q315054403 2009-12-01
  • 打赏
  • 举报
回复
@@fetch_status 值是个状态值
自己引入计数控制退出喽
-狙击手- 2009-12-01
  • 打赏
  • 举报
回复
Fetch next From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei --开始抓第一条数据
declare @i int
While @@fetch_status=0
--如果数据集里一直有数据
Begin
Update visitl_user Set visitl_lszxiaofei=@visitl_lszxiaofei+1,[visitl_jrxiaofei]=@visitl_jrxiaofei+1


set @i = @I +1
If @i =451
   break;
Fetch NEXT From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei --跳到下一条数

展工匠 2009-12-01
  • 打赏
  • 举报
回复
路过的兄弟给点意见!
展工匠 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 icelovey 的回复:]
引用 5 楼 js_szy 的回复:
SQL codeDeclare myCursorCursorForSelecttop450 .....--定义的时候就取450 ???

同意, 改成450不就可以啦..

要不再里面定义一个计数器, 到450的时候CLOSE, DEALLOCATE??
[/Quote]
我用 set @i=@i+1
If @i =4
break

Close myCursor --关闭游标
Deallocate myCursor --删除游标
这个还是不行!

展工匠 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yelongfei2008 的回复:]
我要实现的是目的是,创建一个游标,游标查询前20条数据,用游标来更新这二20条数据中的前5条数据中的其中两个段!
我的代码如下:
Declare @visitl_jrxiaofei int
Declare @visitl_lszxiaofei int
declare @i int
Declare myCursor Cursor For Select top 20 visitl_jrxiaofei,visitl_lszxiaofei From visitl_user
Open myCursor          --打开游标
Fetch next From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei    --开始抓第一条数据
While @@fetch_status=0                      --如果数据集里一直有数据
Begin

  Update visitl_user Set [visitl_jrxiaofei]=@visitl_jrxiaofei+1,visitl_lszxiaofei=@visitl_lszxiaofei+1
  Fetch Next From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei    --跳到下一条数据
  set @i=@i+1
  If @i =4 
  break
End

Close myCursor      --关闭游标
Deallocate myCursor  --删除游标

但这里还是不行恩,这里要怎么样才能实现我的这个功能呢?根据二楼的用SET @i=@i+1
if @i=4
break
这样还是不行恩!
[/Quote]

要如何实现呢?
展工匠 2009-12-01
  • 打赏
  • 举报
回复
我要实现的是目的是,创建一个游标,游标查询前20条数据,用游标来更新这二20条数据中的前5条数据中的其中两个段!
我的代码如下:
Declare @visitl_jrxiaofei int
Declare @visitl_lszxiaofei int
declare @i int
Declare myCursor Cursor For Select top 20 visitl_jrxiaofei,visitl_lszxiaofei From visitl_user
Open myCursor --打开游标
Fetch next From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei --开始抓第一条数据
While @@fetch_status=0 --如果数据集里一直有数据
Begin

Update visitl_user Set [visitl_jrxiaofei]=@visitl_jrxiaofei+1,visitl_lszxiaofei=@visitl_lszxiaofei+1
Fetch Next From myCursor Into @visitl_jrxiaofei,@visitl_lszxiaofei --跳到下一条数据
set @i=@i+1
If @i =4
break
End

Close myCursor --关闭游标
Deallocate myCursor --删除游标

但这里还是不行恩,这里要怎么样才能实现我的这个功能呢?根据二楼的用SET @i=@i+1
if @i=4
break
这样还是不行恩!
icelovey 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 js_szy 的回复:]
SQL codeDeclare myCursorCursorForSelecttop450 .....--定义的时候就取450 ???
[/Quote]
同意, 改成450不就可以啦..

要不再里面定义一个计数器, 到450的时候CLOSE, DEALLOCATE??
华夏小卒 2009-12-01
  • 打赏
  • 举报
回复
Declare myCursor Cursor For Select top 450 ..... --定义的时候就取450 ???
展工匠 2009-12-01
  • 打赏
  • 举报
回复
兄弟们谢过了,偶去试试

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧