VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 643|回复: 2

有关游标的一个问题,请多指教!

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-10 18:00:01 | 显示全部楼层 |阅读模式
我写了下面一段代码,放在分析器里执行,结果是"名为 'cursor_problemrecord' 的游标不存在。",不知该如何获得该游标,还请高手指教!

DECLARE @sql nvarchar(1000)
DECLARE @eid int
DECLARE @bgndate smalldatetime
DECLARE @enddate smalldatetime
DECLARE @otherwhere nvarchar(200)

DECLARE @ma_6_1 nvarchar(2000)
DECLARE @tmpgrade int  
DECLARE @tmpplaceincomp nvarchar(30)
DECLARE @tmpydate int  
SET @eid = 1
SET @bgndate = convert(smalldatetime,'2005-12-1')
SET @enddate = convert(smalldatetime,'2017-1-1')
SET @otherwhere = N' status=-3 '

SET @sql = N'DECLARE cursor_problemrecord INSENSITIVE CURSOR FOR (SELECT grade,placeincomp,Year(bgndate) FROM problem_record WHERE recscid=31 AND receid=@eid AND (bgndate>=@bgndate AND enddate<@enddate)'+N' AND  '+@otherwhere+N' ORDER BY bgndate DESC  )'
EXEC sp_executesql @sql,N'@eid int,@bgndate smalldatetime,@enddate smalldatetime',@eid,@bgndate,@enddate

OPEN cursor_problemrecord
FETCH NEXT FROM cursor_problemrecord
INTO @tmpgrade,@tmpplaceincomp,@tmpydate
WHILE @@FETCH_STATUS = 0
        BEGIN
                SET @ma_6_1 = @ma_6_1 +CONVERT(nvarchar(4),@tmpydate)+ N'#'+CONVERT(nvarchar(4),@tmpgrade)+ N'#'+@tmpplaceincomp+ N'@'
                FETCH NEXT FROM cursor_problemrecord
                INTO @tmpgrade,@tmpplaceincomp,@tmpydate
        END                                       
CLOSE cursor_problemrecord
DEALLOCATE cursor_problemrecord       

GO
回复

使用道具 举报

0

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-4-7 22:45:01 | 显示全部楼层
SET @sql = N'DECLARE cursor_problemrecord INSENSITIVE CURSOR FOR (SELECT grade,placeincomp,Year(bgndate) FROM problem_record WHERE recscid=31 AND receid=@eid AND (bgndate>=@bgndate AND enddate<@enddate)'+N' AND  '+@otherwhere+N' ORDER BY bgndate DESC  )'
EXEC sp_executesql @sql,N'@eid int,@bgndate smalldatetime,@enddate smalldatetime',@eid,@bgndate,@enddate

游标定义在动态SQL语句中,所以这里的编译不认识。

在动态SQL语句的执行中,把游标作为参数返回。
(游标在存储过程中只能作为参数传出,不可传入)

EXEC sp_executesql @sql,N'@eid int,@bgndate smalldatetime,@enddate smalldatetime,cursor_problemrecord cursor output',@eid,@bgndate,@enddate,cursor_problemrecord output

试试
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-4-11 15:15:01 | 显示全部楼层
执行结果是"向存储过程传递常量时不能使用 OUTPUT 选项。",
还请再麻烦一下,看看是什么问题?谢谢了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表