sql server 2000下动态定义游标,运行时报游标不存在

时间:2022-11-30 13:29:51
我参照网上介绍的动态游标使用方法在我机器上进行测试的时候,在打开游标及取数时会报游标不存在

脚本如下:
declare @sqlExec varchar(8000),@tableName varchar(255),@v_name varchar(200)
set @tableName = 'sysobjects'
set @sqlExec = 'declare cursor1 cursor for ' + CHAR(13) 
set @sqlExec = @sqlExec + ' select name from ' + @tableName
exec(@sqlExec) 
open cursor1 
fetch next from cursor1 into @v_name 
while @@fetch_status = 0 
begin
select @v_name
fetch next from cursor1 into @v_name 
end 
close cursor1 
deallocate cursor1 

执行后报如下错误:
服务器: 消息 16916,级别 16,状态 1,行 6
名为 'cursor1' 的游标不存在。
服务器: 消息 16916,级别 16,状态 1,行 7
名为 'cursor1' 的游标不存在。
服务器: 消息 16916,级别 16,状态 1,行 13
名为 'cursor1' 的游标不存在。
服务器: 消息 16916,级别 16,状态 1,行 14
名为 'cursor1' 的游标不存在。

是sql server有什么参数要进行配置么?

9 个解决方案

#1


2005 下没问题。2000问题等高手。

#2


试了下,sql 2000,2005 都没有问题。

不知道你是怎么试的

#3


open cursor1  
fetch next from cursor1 into @v_name  
while @@fetch_status = 0  
begin
select @v_name
fetch next from cursor1 into @v_name  
end  
close cursor1  
deallocate cursor1 


把这些也放到@sqlExec 里面

#4


sql server 2000下动态定义游标,运行时报游标不存在有问题?

#5


加个这个试试
set @sqlExec = 'declare cursor1 cursor global for ' + CHAR(13)  

#6


关注,05是没问题

#7


我在2005下试同样的代码是没问题的,2000下就不行了,不知道是不是2000不支持这种写法

#8


加了global好象就ok了
谢谢
引用 5 楼 zoeforever 的回复:
加个这个试试

SQL code
set @sqlExec = 'declare cursor1 cursor  global for ' + CHAR(13)

#9


不过,加了global的话,有个比较麻烦的地方,如果一个用户在执行这段代码的时候,另一个用户也执行到这段代码的话,估计就会报游标重复了。。。。

#1


2005 下没问题。2000问题等高手。

#2


试了下,sql 2000,2005 都没有问题。

不知道你是怎么试的

#3


open cursor1  
fetch next from cursor1 into @v_name  
while @@fetch_status = 0  
begin
select @v_name
fetch next from cursor1 into @v_name  
end  
close cursor1  
deallocate cursor1 


把这些也放到@sqlExec 里面

#4


sql server 2000下动态定义游标,运行时报游标不存在有问题?

#5


加个这个试试
set @sqlExec = 'declare cursor1 cursor global for ' + CHAR(13)  

#6


关注,05是没问题

#7


我在2005下试同样的代码是没问题的,2000下就不行了,不知道是不是2000不支持这种写法

#8


加了global好象就ok了
谢谢
引用 5 楼 zoeforever 的回复:
加个这个试试

SQL code
set @sqlExec = 'declare cursor1 cursor  global for ' + CHAR(13)

#9


不过,加了global的话,有个比较麻烦的地方,如果一个用户在执行这段代码的时候,另一个用户也执行到这段代码的话,估计就会报游标重复了。。。。