SQL 中的递归函数如何修复超出嵌套级别的错误
How to fix nesting level exceeded Error with recursive function in SQL
可能与 this 重复,但没有得到任何解决方案。我有以下函数,它们将浮点数作为输入并使用一些自定义逻辑将数字转换为天数。
CREATE FUNCTION [dbo].[F_GetDurationInDays_BI]
(
@TimeInMinutes FLOAT
)
RETURNS FLOAT
AS
Begin
If (@TimeInMinutes >= 0 and @TimeInMinutes < 480)
return (@TimeInMinutes/60)/8
Else If (@TimeInMinutes >= 480 and @TimeInMinutes < 1440)
return 1
Else If (@TimeInMinutes >= 1440 and @TimeInMinutes < 1920)
return 1.5
Else If (@TimeInMinutes = 1920)
return 2
Else If (@TimeInMinutes > 1920)
return ( select [dbo].[F_GetDurationInDays_BI] (@TimeInMinutes - 1440) +1)
return 0
End
当我给出一些更高的值时,
select Format(dbo.F_GetDurationInHours_BI (226560), 'N1')
我得到如下嵌套级别超出异常,
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
有没有办法增加嵌套层数限制或任何其他可能的方法。感谢帮助。
您可以将其转换为迭代循环而不是递归函数调用。逻辑是这样的:
Begin
declare @counter int;
select @counter = 0;
while (true)
begin
If (@TimeInMinutes >= 0 and @TimeInMinutes < 480)
return @counter + (@TimeInMinutes/60)/8 ;
Else If (@TimeInMinutes >= 480 and @TimeInMinutes < 1440)
return @counter + 1;
Else If (@TimeInMinutes >= 1440 and @TimeInMinutes < 1920)
return @counter + 1.5;
Else If (@TimeInMinutes = 1920)
return @counter + 2;
Else If (@TimeInMinutes > 1920)
begin
select @TimeInMinutes = (@TimeInMinutes - 1440);
select @counter := @counter + 1;
end;
end;
return @counter;
End;
可能与 this 重复,但没有得到任何解决方案。我有以下函数,它们将浮点数作为输入并使用一些自定义逻辑将数字转换为天数。
CREATE FUNCTION [dbo].[F_GetDurationInDays_BI]
(
@TimeInMinutes FLOAT
)
RETURNS FLOAT
AS
Begin
If (@TimeInMinutes >= 0 and @TimeInMinutes < 480)
return (@TimeInMinutes/60)/8
Else If (@TimeInMinutes >= 480 and @TimeInMinutes < 1440)
return 1
Else If (@TimeInMinutes >= 1440 and @TimeInMinutes < 1920)
return 1.5
Else If (@TimeInMinutes = 1920)
return 2
Else If (@TimeInMinutes > 1920)
return ( select [dbo].[F_GetDurationInDays_BI] (@TimeInMinutes - 1440) +1)
return 0
End
当我给出一些更高的值时,
select Format(dbo.F_GetDurationInHours_BI (226560), 'N1')
我得到如下嵌套级别超出异常,
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
有没有办法增加嵌套层数限制或任何其他可能的方法。感谢帮助。
您可以将其转换为迭代循环而不是递归函数调用。逻辑是这样的:
Begin
declare @counter int;
select @counter = 0;
while (true)
begin
If (@TimeInMinutes >= 0 and @TimeInMinutes < 480)
return @counter + (@TimeInMinutes/60)/8 ;
Else If (@TimeInMinutes >= 480 and @TimeInMinutes < 1440)
return @counter + 1;
Else If (@TimeInMinutes >= 1440 and @TimeInMinutes < 1920)
return @counter + 1.5;
Else If (@TimeInMinutes = 1920)
return @counter + 2;
Else If (@TimeInMinutes > 1920)
begin
select @TimeInMinutes = (@TimeInMinutes - 1440);
select @counter := @counter + 1;
end;
end;
return @counter;
End;