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

AB_*_*_87 0 sql-server sql-server-2008

尝试调用递归标量函数时,我收到以下错误.

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
Run Code Online (Sandbox Code Playgroud)

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

SELECT dbo.fn_CalculateTotal('2015-02-01') OPTION (maxrecursion 0)  ;
Run Code Online (Sandbox Code Playgroud)

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

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

Ed *_*per 7

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

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