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

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

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

  • 相关阅读:
    apache 修改文件上传大小限制
    linux 桥接模式下 固定ip 设置
    简易 红包生成
    Sublime Text 3 快捷键
    excle 文件的导入和导出
    php 下载文件
    右则css 小浮条
    html 自动跳转页面
    Media Queries详细
    mobile响应式页面meta信息相关记录
  • 原文地址:https://www.cnblogs.com/namelessmyth/p/9338000.html
Copyright © 2011-2022 走看看