游标创建成功以后,无法打开

dendt 2015-07-17 08:53:46
初学sql server2008,游标创建成功用open指令打开,总是报错
报错消息如下:
消息 16916,级别 16,状态 1,第 0 行
名为 'mytestcursor' 的游标不存在。
什么原因?
...全文
415 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2015-07-17
  • 打赏
  • 举报
回复
引用 11 楼 dendt 的回复:
[quote=引用 9 楼 roy_88 的回复:] 楼主的问题,应该不是在同一个会话执行语句,所以报错 语句要一次执行 或 声明全局游标 如 DECLARE mytestcursor cursor GLOBAL SCROLL FOR
没在同一会话执行是什么意思我没有看懂,能不能具体说下[/quote]
引用 11 楼 dendt 的回复:
[quote=引用 9 楼 roy_88 的回复:] 楼主的问题,应该不是在同一个会话执行语句,所以报错 语句要一次执行 或 声明全局游标 如 DECLARE mytestcursor cursor GLOBAL SCROLL FOR
没在同一会话执行是什么意思我没有看懂,能不能具体说下[/quote]
引用 11 楼 dendt 的回复:
[quote=引用 9 楼 roy_88 的回复:] 楼主的问题,应该不是在同一个会话执行语句,所以报错 语句要一次执行 或 声明全局游标 如 DECLARE mytestcursor cursor GLOBAL SCROLL FOR
没在同一会话执行是什么意思我没有看懂,能不能具体说下[/quote] 数据库执行环境应该默认游标为LOCAL
--执行1
DECLARE mytestcursor cursor LOCAL SCROLL FOR
SELECT TOP 2  name FROM sys.tables


--执行2
OPEN mytestcursor
/*
消息 16916,级别 16,状态 1,第 0 行
名为 'mytestcursor' 的游标不存在。

*/
dendt 2015-07-17
  • 打赏
  • 举报
回复
引用 9 楼 roy_88 的回复:
楼主的问题,应该不是在同一个会话执行语句,所以报错 语句要一次执行 或 声明全局游标 如 DECLARE mytestcursor cursor GLOBAL SCROLL FOR
没在同一会话执行是什么意思我没有看懂,能不能具体说下
Pact_Alice 2015-07-17
  • 打赏
  • 举报
回复
引用 8 楼 dendt 的回复:
[quote=引用 5 楼 Landa_Alice 的回复:] DECLARE @SalesOrderDetailID INT declare mytestcursor cursor scroll for select SalesOrderDetailID from SalesOrderDetailID WHERE SalesOrderID='43659' OPEN mytestcursor FETCH NEXT FROM mytestcursor INTO @SalesOrderDetailID WHILE @@FETCH_STATUS=0 BEGIN --做操作 SELECT @SalesOrderDetailID FETCH NEXT FROM mytestcursor INTO @SalesOrderDetailID END Close mytestcursor Deallocate mytestcursor 这是游标的基本语句,你看看 如果你简单的写declare mytestcursor cursor scroll for select * from 职工表 这两句话肯定是不行的,你没有遍历点啊
是这样啊,那我再问下,我之前这两句创建游标,执行以后显示的是命令完成,说明我定义的不完整是不是 [/quote] 是的啊。你写的这两句话只是创建游标名称和获取需要遍历的数据集,至于你怎么操作这个数据集你还没有处理呢? 根据你的业务逻辑和我给你的整个游标框架,自己试试写
中国风 2015-07-17
  • 打赏
  • 举报
回复
楼主的问题,应该不是在同一个会话执行语句,所以报错 语句要一次执行 或 声明全局游标 如 DECLARE mytestcursor cursor GLOBAL SCROLL FOR
卖水果的net 2015-07-17
  • 打赏
  • 举报
回复


create proc sp_showtable  
as  
begin  
    declare @name varchar(30) 

    declare mytestcursor cursor scroll for
    select top 10 name from sysobjects

    open mytestcursor
    fetch next from mytestcursor into @name
    while @@FETCH_STATUS = 0 
    begin
        print @name 
        fetch next from mytestcursor into @name
    end

    close mytestcursor 
    deallocate mytestcursor

end
go
sp_showtable
go
drop proc sp_showtable
go


sysrscols
sysrowsets
sysallocunits
sysfiles1
syspriorities
sysfgfrag
sysphfg
sysprufiles
sysftinds
sysowners

dendt 2015-07-17
  • 打赏
  • 举报
回复
引用 5 楼 Landa_Alice 的回复:
DECLARE @SalesOrderDetailID INT declare mytestcursor cursor scroll for select SalesOrderDetailID from SalesOrderDetailID WHERE SalesOrderID='43659' OPEN mytestcursor FETCH NEXT FROM mytestcursor INTO @SalesOrderDetailID WHILE @@FETCH_STATUS=0 BEGIN --做操作 SELECT @SalesOrderDetailID FETCH NEXT FROM mytestcursor INTO @SalesOrderDetailID END Close mytestcursor Deallocate mytestcursor 这是游标的基本语句,你看看 如果你简单的写declare mytestcursor cursor scroll for select * from 职工表 这两句话肯定是不行的,你没有遍历点啊
是这样啊,那我再问下,我之前这两句创建游标,执行以后显示的是命令完成,说明我定义的不完整是不是
Pact_Alice 2015-07-17
  • 打赏
  • 举报
回复
DECLARE @SalesOrderDetailID INT declare mytestcursor cursor scroll for select SalesOrderDetailID from SalesOrderDetailID WHERE SalesOrderID='43659' OPEN mytestcursor FETCH NEXT FROM mytestcursor INTO @SalesOrderDetailID WHILE @@FETCH_STATUS=0 BEGIN --做操作 SELECT @SalesOrderDetailID FETCH NEXT FROM mytestcursor INTO @SalesOrderDetailID END Close mytestcursor Deallocate mytestcursor 这是游标的基本语句,你看看 如果你简单的写declare mytestcursor cursor scroll for select * from 职工表 这两句话肯定是不行的,你没有遍历点啊
中国风 2015-07-17
  • 打赏
  • 举报
回复
明显游标语法不正确,可看一下联机帮助 https://msdn.microsoft.com/zh-cn/library/ms180152(v=sql.105).aspx
dendt 2015-07-17
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
你的cursor 是怎么定义的,如果他提示不存,那肯定是不存在。 最大的可能是作用域不对。
就是很简单的创建代码,显示的也是命令已经完成 代码是这样的: declare mytestcursor cursor scroll for select * from 职工表
dendt 2015-07-17
  • 打赏
  • 举报
回复
就是很简单的创建代码,显示的也是命令已经完成 代码是这样的: declare mytestcursor cursor scroll for select * from 职工表
Pact_Alice 2015-07-17
  • 打赏
  • 举报
回复
能把你代码贴上来看看吗?
卖水果的net 2015-07-17
  • 打赏
  • 举报
回复
你的cursor 是怎么定义的,如果他提示不存,那肯定是不存在。 最大的可能是作用域不对。

22,301

社区成员

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

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