mssql2000游标循环次数对不上,如何解决??

2024-08-24 10:36

本文主要是介绍mssql2000游标循环次数对不上,如何解决??,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  mssql2000游标循环次数对不上。

CREATE proc usp_ins_requisite_sc @bill char(16),@stateman varchar(50)  
as  
begin  declare @rowno char(8),@row_id char(8),@bombill varchar(50)declare temp_cursor cursor for   select distinct(y.bombill),isnull(y.row_id,''),isnull(y.rowno,'') from vw_salebill x,t_bombill y where x.bill=@bill and x.itemcode=substring(y.fatherbill,1,10) and y.workname is not null   and y.itemcode like '7%'  and y.workname not in ('06','01')  and isnull(y.type,'1') <> '0'open temp_cursor  fetch next from temp_cursor into @bombill,@row_id,@rowno --   while @@fetch_status = 0  begin--    select @fatherbill = x.itemcode from vw_salebill x,t_bombill y 
--    where x.bill=@bill and x.itemcode=y.fatherbill and y.itemtype='1'   if @row_id = ''
begininsert into t_requisite_sc (salebill,orderbill,custcode,custname,rundate,senddate,  prodcode,oldprodcode,prodname,prodmodel,  prodstandards,prodnum,wdep,odep,cdep,  fnum,sfanum,prepnum,itemcode,oldcode,  itemnum,workstep,applynum,plannum,type,state,billman,billdate,remark,cremark,bomunit,bomnum,color,cloth,wstuff,gild,workname,stuff,outdate,unitcode)  select  x.bill+x.rowno,x.orderbill,x.cust_code,x.cust_name,x.statedate,x.senddate1,  x.itemcode,x.oldcode,x.itemname,x.itemmodel,  x.standards,x.itemnum,x.wdep,x.odep,x.cdep,  x.fnum,x.sfanum,x.prepnum,y.itemid,y.itemcode,  x.itemnum*y.itemnum,y.workstep,x.itemnum*y.itemnum,0,'1','0',@stateman,getdate(),x.remark,dbo.uf_getcremark(itemid) ,y.bomunit,y.bomnum,dbo.uf_getcolor(y.itemid),dbo.uf_getcloth(y.itemid),x.wstuff,x.gild, CASE y.workname WHEN '04'  THEN 'D021' WHEN '05'  THEN 'D022'  WHEN '06'  THEN 'D017'  WHEN '16'  THEN 'D018'  WHEN '18'  THEN 'D019'   WHEN '20'  THEN 'D020'   WHEN '25'  THEN 'D043'   WHEN '30'  THEN 'D024'   WHEN '01'  THEN '0000'   WHEN '54'  THEN 'D054'    WHEN '55'  THEN 'D055'    WHEN '56'  THEN 'D056'    WHEN '57'  THEN 'D057'   end,stuff,outdate,y.unitcodefrom vw_salebill x,t_bombill y  where x.bill=@billand x.itemcode=substring(y.fatherbill,1,10)  and y.workname is not null   and y.itemcode like '7%'    and y.workname not in ('06')  and isnull(y.type,'1') <> '0'--   and substring(bombill,1,13) in (select  y.bombill from vw_salebill x,t_bombill y where x.bill=@bill and substring(y.fatherbill,1,10) like x.itemcode and produce_type='2'  and y.itemcode like '7%' )endif @rowno = ''
begininsert into t_requisite_sc(salebill,orderbill,custcode,custname,rundate,senddate,  prodcode,oldprodcode,prodname,prodmodel,  prodstandards,prodnum,wdep,odep,cdep,  fnum,sfanum,prepnum,itemcode,oldcode,  itemnum,workstep,applynum,plannum,type,state,billman,billdate,remark,cremark,bomunit,bomnum,color,cloth,wstuff,gild,workname,stuff,outdate,unitcode)  select  x.bill+x.rowno,x.orderbill,x.cust_code,x.cust_name,x.statedate,x.senddate1,  x.itemcode,x.oldcode,x.itemname,x.itemmodel,  x.standards,x.itemnum,x.wdep,x.odep,x.cdep,  x.fnum,x.sfanum,x.prepnum,y.itemid,y.itemcode,  x.itemnum*y.itemnum,y.workstep,x.itemnum*y.itemnum,0,'1','0',@stateman,getdate(),x.remark,dbo.uf_getcremark(itemid) ,y.bomunit,y.bomnum,dbo.uf_getcolor_p(y.itemid),dbo.uf_getcloth(y.itemid),x.wstuff,x.gild, CASE y.workname WHEN '04'  THEN 'D021' WHEN '05'  THEN 'D022'  WHEN '06'  THEN 'D017'  WHEN '16'  THEN 'D018'  WHEN '18'  THEN 'D019'   WHEN '20'  THEN 'D020'   WHEN '25'  THEN 'D043'   WHEN '30'  THEN 'D024'   WHEN '01'  
THEN '0000'   WHEN '54'  THEN 'D054'    WHEN '55'  THEN 'D055'    WHEN '56'  THEN 'D056'    WHEN '57'  THEN 'D057'  end,stuff,outdate,y.unitcodefrom vw_salebill x,t_bombill y  where x.bill=@bill  and x.itemcode=substring(y.fatherbill,1,10)    and y.workname is not null  and y.itemcode like '7%'   and y.workname not in ('06')  and isnull(y.type,'1') <> '0'-- and produce_type<>'2'
--        and substring(bombill,1,13) in (select  y.bombill from vw_salebill x,t_bombill y where x.bill=@bill and substring(y.fatherbill,1,10) like x.itemcode and produce_type='2'  and y.itemcode like '7%' )endfetch next from temp_cursor into @bombill,@row_id,@rowno end  close temp_cursor  deallocate temp_cursor     
end  

祖传存储过程,mssql2000,这玩意游标实际查询的时候90条以上的数据,@row_id全部为null,@rowno全部不为null,但是游标实际只执行了一次,是不是我哪里看漏了,不然90条的记录游标只循环一次我无法理解啊。

友情提示:
  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

解决方案

  如下是上述问题的解决方案,仅供参考:

  在 SQL Server 2000 中,游标操作是一个常见的问题,特别是当涉及到对大量数据的处理时。从你提供的存储过程代码来看,有几个可能的原因导致游标循环次数不符合预期:

  1. FETCH_STATUS 检查: 你的代码中注释掉了 @@fetch_status = 0 的检查。这是非常重要的,因为 @@fetch_status 会告诉你上一次 FETCH 操作是否成功。如果没有检查 @@fetch_status,游标可能会在遇到第一条数据后立即停止。你需要取消注释并使用这个检查来确保循环继续执行。

  2. FETCH NEXT: 确保每次循环结束时都调用了 FETCH NEXT 来获取下一条记录。如果 FETCH NEXT 没有被正确调用,循环将不会继续。

  3. WHERE 子句逻辑: 检查你的 WHERE 子句逻辑是否正确。如果 WHERE 子句中的条件导致没有记录被选中,游标将不会执行循环。

  4. 变量初始化: 确保在游标打开之前,所有相关的变量都已经正确初始化。如果 @row_id@rowno 在游标开始之前就被设置为特定的值,这可能会影响循环的逻辑。

  5. 错误处理: 检查是否有任何错误处理逻辑(例如 TRY...CATCH)可能在游标执行过程中被触发,这可能会导致游标提前结束。

  6. 性能问题: 如果查询本身非常慢,或者服务器性能问题,可能会给人一种游标只执行了一次的错觉。检查服务器性能和查询执行时间。

  7. 调试: 你可以在 FETCH 操作后添加一些调试输出,比如打印当前的 @bombill, @row_id, 和 @rowno,以确保循环按预期进行。

  8. 游标声明: 检查游标的声明是否有问题,比如是否正确地声明了所有需要的列。

  9. 事务: 如果存储过程中有事务的使用,确保事务的使用是正确的,并且没有因为某些原因导致游标提前结束。

  10. 死锁或锁定问题: 检查是否有死锁或锁定问题导致游标执行被阻塞。

最后,由于 SQL Server 2000 是一个非常老的版本,可能存在一些已知的 bug 或限制,这可能也会影响游标的正常工作。如果可能的话,考虑升级到较新的 SQL Server 版本,以获得更好的性能和稳定性。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


这篇关于mssql2000游标循环次数对不上,如何解决??的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102233

相关文章

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3