本文主要是介绍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 中,游标操作是一个常见的问题,特别是当涉及到对大量数据的处理时。从你提供的存储过程代码来看,有几个可能的原因导致游标循环次数不符合预期:
-
FETCH_STATUS 检查: 你的代码中注释掉了
@@fetch_status = 0
的检查。这是非常重要的,因为@@fetch_status
会告诉你上一次FETCH
操作是否成功。如果没有检查@@fetch_status
,游标可能会在遇到第一条数据后立即停止。你需要取消注释并使用这个检查来确保循环继续执行。 -
FETCH NEXT: 确保每次循环结束时都调用了
FETCH NEXT
来获取下一条记录。如果FETCH NEXT
没有被正确调用,循环将不会继续。 -
WHERE 子句逻辑: 检查你的
WHERE
子句逻辑是否正确。如果WHERE
子句中的条件导致没有记录被选中,游标将不会执行循环。 -
变量初始化: 确保在游标打开之前,所有相关的变量都已经正确初始化。如果
@row_id
或@rowno
在游标开始之前就被设置为特定的值,这可能会影响循环的逻辑。 -
错误处理: 检查是否有任何错误处理逻辑(例如
TRY...CATCH
)可能在游标执行过程中被触发,这可能会导致游标提前结束。 -
性能问题: 如果查询本身非常慢,或者服务器性能问题,可能会给人一种游标只执行了一次的错觉。检查服务器性能和查询执行时间。
-
调试: 你可以在
FETCH
操作后添加一些调试输出,比如打印当前的@bombill
,@row_id
, 和@rowno
,以确保循环按预期进行。 -
游标声明: 检查游标的声明是否有问题,比如是否正确地声明了所有需要的列。
-
事务: 如果存储过程中有事务的使用,确保事务的使用是正确的,并且没有因为某些原因导致游标提前结束。
-
死锁或锁定问题: 检查是否有死锁或锁定问题导致游标执行被阻塞。
最后,由于 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游标循环次数对不上,如何解决??的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!