【发布时间】:2018-11-27 13:39:16
【问题描述】:
我有一张表格my_table
rowNumber number ...
1 23
2 14
3 15
4 25
5 19
6 21
7 19
8 37
9 31
...
1000 28
我想找到number 列的递增连续序列的最大长度。对于此示例,它将是 3:
14, 15, 25
我的想法是为每个数字计算这样的长度:
rowNumber number ... length
1 23 1
2 14 1
3 15 2
4 25 3
5 19 1
6 21 2
7 19 1
8 37 2
9 31 1
...
然后取最大值。为了计算length,我编写了以下使用递归的查询:
with enhanced_table as (select *
,1 length
from my_table
where rowNumber = 1
union all
(select b.*
,case when b.number > a.number
then a.length + 1
end new_column
from enhanced_table a, my_table b
where b.rowNumber = a.rowNumber + 1
)
select max(length)
from enhanced_table
所以,我试图从rowNumber = 1 开始,并通过递归连续添加所有其他行。我收到maximum recursion 100 has been exhausted before statement completion 错误。
我的问题是:我应该找到一种方法来增加服务器上允许的最大迭代次数(鉴于查询很简单,我认为运行 1000 次迭代不会有问题),还是找到另一种方法?
另外,100 次迭代是不是太低了阈值?
谢谢!
【问题讨论】:
-
您应该避免在存储过程中使用递归代码,除非您绝对确定深度永远不会超过“几个”。如果不止于此,您必须假设它会在某个时候达到极限并死亡。
标签: sql-server recursion exceed