游标报错!同时出现游标已存在和游标不存在!!!

a124819202 2011-12-26 04:12:55

ALTER PROC P2_OneKeyMergeTreasure(
@roleID int
)AS BEGIN
declare @count int;
select @count=count(1) from T2_RoleTrea where roleid=@roleID and placeType=1
if(@count<=1)begin
return;
end
declare @srcID int;
declare @destID int;
declare @tmpID int;
select top 1 @srcID=id from T2_RoleTrea where roleid=618 and placeType=1 order by id;

declare mycurosr cursor for
select id from T2_RoleTrea
where roleid=618 and placeType=1 and id!=@srcID order by id;
open mycursor
fetch next from mycursor into @destID
while @@fetch_status=0
begin
exec P2_MergeTreasure @srcID,@destID,@tmpID out;
set @srcID=@tmpID;
fetch next from mycursor into @destID
end
close mycursor
deallocate mycursor
END



错误消息 :
消息 16915,级别 16,状态 1,过程 P2_OneKeyMergeTreasure,第 21 行
名为 'mycurosr' 的游标已存在。
消息 16916,级别 16,状态 1,过程 P2_OneKeyMergeTreasure,第 23 行
名为 'mycursor' 的游标不存在。
消息 16916,级别 16,状态 1,过程 P2_OneKeyMergeTreasure,第 24 行
名为 'mycursor' 的游标不存在。
消息 16916,级别 16,状态 1,过程 P2_OneKeyMergeTreasure,第 31 行
名为 'mycursor' 的游标不存在。
消息 16916,级别 16,状态 1,过程 P2_OneKeyMergeTreasure,第 32 行
名为 'mycursor' 的游标不存在。
...全文
1058 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuohuameijiang 2011-12-29
  • 打赏
  • 举报
回复
LZ,你给错分了。
hllfl 2011-12-26
  • 打赏
  • 举报
回复
楼主又睡着了
-晴天 2011-12-26
  • 打赏
  • 举报
回复
有人只不过是复制了我写的一句话!!!
-晴天 2011-12-26
  • 打赏
  • 举报
回复
楼主,你有没有搞错!
a124819202 2011-12-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fredrickhu 的回复:]
你定义的,和你调用的,不是同一个名称.
[/Quote]


看来我今天真的是没睡醒。。 !!

非常感谢!
a124819202 2011-12-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qianjin036a 的回复:]
既然你前面的判断是根据 roleid=@roleID 来进行的,那定义游标时怎么又成了 roleid=618 了?
[/Quote]

这个是后来我想单独执行

declare @srcID int;
declare @destID int;
declare @tmpID int;
select top 1 @srcID=id from T2_RoleTrea where roleid=618 and placeType=1 order by id;

declare mycurosr cursor for
select id from T2_RoleTrea
where roleid=618 and placeType=1 and id!=@srcID order by id;
open mycursor
fetch next from mycursor into @destID
while @@fetch_status=0
begin
exec P2_MergeTreasure @srcID,@destID,@tmpID out;
set @srcID=@tmpID;
fetch next from mycursor into @destID
end
close mycursor
deallocate mycursor
这段 就把@roleid换了下。。 刚刚去改 可是有人回答了改不了了。。
--小F-- 2011-12-26
  • 打赏
  • 举报
回复
你定义的,和你调用的,不是同一个名称.
-晴天 2011-12-26
  • 打赏
  • 举报
回复
declare mycurosr cursor for
select id from T2_RoleTrea
where roleid=618 and placeType=1 and id!=@srcID order by id;
open mycursor


你定义的,和你调用的,不是同一个名称.
-晴天 2011-12-26
  • 打赏
  • 举报
回复
既然你前面的判断是根据 roleid=@roleID 来进行的,那定义游标时怎么又成了 roleid=618 了?
a124819202 2011-12-26
  • 打赏
  • 举报
回复
P2_MergeTreasure 这个存储过程没有游标!

而且我换了个名字运行还是这个错误!
AcHerat 2011-12-26
  • 打赏
  • 举报
回复
看下你的 P2_MergeTreasure 这个存储过程是否有游标,有的话换个名字。
_0筱筱0_ 2011-12-26
  • 打赏
  • 举报
回复
建游标之前先判断是否已存在。
快溜 2011-12-26
  • 打赏
  • 举报
回复
P2_MergeTreasure有游标没?不要去相同的游标名字

22,300

社区成员

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

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