首页 新闻 搜索 专区 学院

sqlserver 存储过程 游标

0
悬赏园豆:20 [已解决问题] 解决于 2018-07-19 12:12

存储过程返回游标及调用这个存储过程对游标处理,请大神给个实例,数据小白。

jhjs的主页 jhjs | 初学一级 | 园豆:11
提问于:2018-07-10 14:24
< >
分享
最佳答案
0

问得太范了,为什么要返回游标??

游标用于循环处理数据,效率低能耗高

 

https://www.cnblogs.com/knowledgesea/p/3699851.html

收获园豆:20
xiaohc | 初学一级 |园豆:23 | 2018-07-12 13:34
其他回答(1)
0

其实游标就跟集合中的下标是 一样的,功能就是去查找数据。存储过程中 如果你不懂  就直接用  for loop循环呗 ,里面的游标不用你自己操作

^keepHungry$ | 园豆:534 (小虾三级) | 2018-07-12 14:29

这是我写的一个测试的存储过程:


create proc tb1_proc(
@level int,
@cur2 cursor varying output
)
as
declare @mycur cursor
declare @mytype tb1_type --type(id int ,name nvarchar(50))自定义类型
declare @id int, @name nvarchar(50)
begin
    if @level=3
        begin
            --exec cur_proc @mycur output
            set @mycur=cursor for
            select * from tb1
            open @mycur
            fetch next from @mycur into @id, @name

            while @@FETCH_STATUS=0
                begin
                insert into @mytype values(@id,@name)
                fetch next from @mycur into @id,@name
                end
            set @cur2=cursor for
            select * from @mytype
            --open @cur2
        end
open @cur2
end

 

调用:

declare @mycur3 cursor
declare @id int, @name nvarchar(50)
begin
exec tb1_proc 3,@cur2=@mycur3 output
fetch next from @mycur3 into @id,@name
while(@@fetch_status=0)
    begin
        print convert(nvarchar,@id)+'--'+@name
        fetch next from @mycur3 into @id,@name
    end
end

结果:

报错:消息 16950,级别 16,状态 2,第 6 行
目前没有为变量 '@mycur3' 分配游标。

@@fetch_status值为-1

 

 

请问什么原因,怎么解决?

 

支持(0) 反对(0) jhjs | 园豆:11 (初学一级) | 2018-07-13 12:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册