排序数据生成的游标,在游标内取数不按顺序取?

heavyrain1234 2017-08-26 09:47:52

DECLARE cursor_phdj CURSOR
FOR
SELECT xst14.xsphdh ,
xst15.xtwpdm ,
xst15.xtwldm ,
CAST(SUM(xst15.xsphsl) AS INT) sl
FROM xst14 ,
xst15
WHERE xst14.xsczhm = xst15.xsczhm
AND xsshrq > '2016-08-16'
AND xst14.xtwldm IN ( SELECT xtwldm
FROM xtm14
WHERE xtgsdm = '00'
AND xtkhlx IN ( '4', '5' )
AND xtwlzt = 'H' )
GROUP BY xst14.xsphdh ,
xst15.xtwpdm ,
xst15.xtwldm
open cursor_phdj
fetch cursor_phdj into @ls_xsphdh,@ls_xtwpdm,@ls_xtwldm,@ls_phsl;
while(@@fetch_status = 0)
begin
SELECT @ls_return_i=COUNT(*)
FROM kct03
WHERE kcczlx = '140'
AND kcckdm = '20'
AND kcczrq > '2016-08-16'
AND xtwldm IN ( SELECT xtwldm
FROM xtm14
WHERE xtgsdm = '00'
AND xtkhlx IN ( '4', '5' )
AND xtwlzt = 'H' )
AND xtwldm=@ls_xtwldm AND xtwpdm=@ls_xtwpdm
fetch cursor_phdj into @ls_xsphdh,@ls_xtwpdm,@ls_xtwldm,@ls_phsl;
end
close cursor_phdj
deallocate cursor_phdj

debug 发现在游标内取数不按顺序取?取到的ls_xsphdh,对仅一、二个值是一样的,但是实际上前7个都应该是一样的。
...全文
105 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
heavyrain1234 2017-08-26
  • 打赏
  • 举报
回复
正解:游标应该是按照order by 的顺序读取的。
  • 打赏
  • 举报
回复
能不用游标就别用 这个游标数据量大的时候 真的效率低
二月十六 2017-08-26
  • 打赏
  • 举报
回复
游标应该是按照order by 的顺序读取的。把上边那个语句直接执行一下试试,看看顺序。 另外看楼主的语句应该可以不用游标就能处理,如果可以楼主给出测试数据和基于测试数据的正确结果,让大家写写试试。

22,209

社区成员

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

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