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

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。