zoukankan      html  css  js  c++  java
  • SQL Server 异常解决:语句被终止。完成执行语句前已用完最大递归 100。

    问题出现业务场景:

      我司有个缺料分析报表,有一个字段是适用机种,需要通过BOM递归读取顶层父物料。这个错就是缺料分析报表执行时报的错;

    原因分析定位:

      通过网上一些资料,猜测应该是某个递归查询语句,遇到死循环了。所以看了一遍整个存储过程大体猜测应该是适用机种的程序出错。单独注释这个程序,整个报表立马运行正常。

      接着继续看代码,果然有一段递归查询语句:

    1  with cte(cnumber,cname,pnumber,fname) as
    2  (
    3   select cnumber,cname,pnumber,fname from #bompc
    4   where cnumber=@fnumber
    5   union all
    6   select ct.cnumber,ct.cname,ct.pnumber,ct.fname from cte tt inner join #bompc ct
    7   on tt.pnumber=ct.cnumber
    8   )
    9   insert into #bomtemp select * from cte

    问题解决:

      发现了出错代码,还需要知道是哪个物料出问题了。由于程序是一次性运行所有的物料。所以考虑加入try catch

     1 BEGIN TRY
     2  --递归找出父料
     3  with cte(cnumber,cname,pnumber,fname) as
     4  (
     5   select cnumber,cname,pnumber,fname from #bompc
     6   where cnumber=@fnumber
     7   union all
     8   select ct.cnumber,ct.cname,ct.pnumber,ct.fname from cte tt inner join #bompc ct
     9   on tt.pnumber=ct.cnumber
    10   )
    11   insert into #bomtemp select * from cte
    12 END TRY
    13 BEGIN CATCH
    14     PRINT '运行到物料发生异常: '+@fnumber;
    15         SELECT
    16         ERROR_NUMBER() AS ErrorNumber,
    17         ERROR_SEVERITY() AS ErrorSeverity,
    18         ERROR_STATE() AS ErrorState,
    19         ERROR_PROCEDURE() AS ErrorProcedure,
    20         ERROR_LINE() AS ErrorLine,
    21         ERROR_MESSAGE() AS ErrorMessage;
    22     RETURN -1;
    23 END CATCH

    单独调用这个存储过程,终于发现了出错物料。果然和猜测的一样。子记录引用了父记录,父记录又引用了子记录。

    将错误数据删除后,问题解决!

  • 相关阅读:
    超星电子书下载攻略
    快速生成PDF书签
    2016抢票软件分享
    Win10安装framework3.5
    .NET破解之分享给新注册的朋友
    封装JedisClient.提供API实现对redis的操作
    java操作redis集群配置[可配置密码]和工具类
    redis 集群java.lang.NoSuchMethodError:SpringJAR包版本冲突错误解决方法
    linux端口开放指定端口的两种方法
    redis requires ruby version 2.2.2的解决方案
  • 原文地址:https://www.cnblogs.com/namelessmyth/p/9338000.html
Copyright © 2011-2022 走看看