OPTION(maxrecursion 0)不适用于SQLServer 2008 R2中的递归标量函数

时间:2016-04-28 07:55:41

标签: sql-server sql-server-2008

尝试调用递归标量函数时出现以下错误。

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).

即使我向函数调用添加OPTION(maxrecursion 0),它也会生成相同的错误

SELECT dbo.fn_CalculateTotal('2015-02-01') OPTION (maxrecursion 0)  ;

dbo.fn_CalculateTotal(' 2015-02-01')每个月递归调用自身(仅限于其返回0的最大日期)。当最长日期超过32个月时,我收到上述错误。

我不确定这里有什么问题?函数可以在少于32个月的数据(31个递归调用)中正常工作。

1 个答案:

答案 0 :(得分:7)

OPTION (maxrecursion 0)适用于递归公用表表达式(CTE)。存储过程,函数,触发器和视图的嵌套限制硬编码为32级,无法增加。您需要重新设计代码以将嵌套级别限制为小于32。

递归CTE可能是嵌套函数调用的可行替代方法。