微雨新晨 2021-04-09 15:34 采纳率: 0%
浏览 41

递归超过最大100限制次数问题的解决

drop table #data
create table #data (name varchar(50),begindate date,enddate date)
insert into #data values('甲一','2021-01-02','2021-03-31')
insert into #data values('甲二','2020-12-05','2021-02-28')
select * from #data

with cte as(
	select dateadd(dd,-datepart(dd,dateadd(mm,1,begindate)),dateadd(mm,1,begindate)) as startmonth,name,begindate,enddate
	from #data
	union all
	select 
				--dateadd(mm,1,A.startmonth) as 加一月 --用加一月去比对则正常
				dateadd(dd,-datepart(dd,dateadd(mm,1,a.startmonth)),dateadd(mm,1,a.startmonth)) as startmonth
--用加一月并算月末最后以自然日比对,则递归次数超限
				,a.name,A.begindate,A.enddate from cte A
		join #data B on A.name=B.name and A.begindate=B.begindate and a.enddate=b.enddate
		where --dateadd(mm,1,A.startmonth)<=B.enddate --用加一月去比对,则正常
				       dateadd(dd,datepart(dd,dateadd(mm,1,a.startmonth)),dateadd(mm,1,a.startmonth))<=B.enddate
		)--用加一月并算月末最后以自然日比对,则递归次数超限
		select * from cte order by name,startmonth

递归中,停止的依据是,生成的startmonth达到了enddate的月份(忽略自然日)

为什么只是用月末比对,就超限制了?

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-14 22:41
    关注

    递归超过最大100限制次数问题通常是由于递归语句导致的,递归语句的递归深度大于数据库系统配置的最大递归深度限制(默认为100)而引起的。对于问题中给出的递归语句,使用月末比对产生的递归深度可能会比使用加一月比对更深,因此可能会导致递归超过最大100限制次数问题。解决方法可以考虑修改递归语句,尽量避免递归深度过深,或者修改数据库系统的最大递归深度限制来解决。

    评论

报告相同问题?

悬赏问题

  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?