阶乘函数错误 - 超出最大存储过程、函数、触发器或视图嵌套级别

朋友

我正在尝试运行以下阶乘函数,但出现以下错误。
超出最大存储过程、函数、触发器或视图嵌套级别(限制为 32)。

这有可能解决吗?

The binomial formula given that
x = total number of “successes” (pass or fail, heads or tails etc.) -- 0.025
P = probability of a success on an individual trial --Rate  0.000729
n = number of trials   -- Denominator 13725
q= 1 – p –- is as below:

    DECLARE @n float(53), @x float(53), @p decimal(10, 10), @q decimal(10,10)
    DECLARE @p0 decimal(10,10), @p1 decimal(10,10), @p2 decimal(10,10), @n1 float(53), @n2 float(53), @n3 float(53)
    SELECT @n =13725 , @x = 0.025 , @p = 0.000729,@q=1-@p 
    SELECT @x = 0.025
    SELECT @n1 = dbo.factorial(@n) 
    SELECT @n2 = dbo.factorial(@n-@x)
    SELECT @n3 = 1
    SELECT @p1 = ( @n1/(@n2 * @n3))*power(@p, @x)*power(@q,@n-@x)
    select @p1 as 'Probability of 0 people getting lung illness'

---factorial function
    create function dbo.factorial(@num1 float(53))
    returns float(53)
    as
    begin
    declare @factno bigint;
     
    if  (@num1=1)  set @factno=1;
    else 
     
    set @factno= @num1*dbo.factorial(@num1-1);
     return @factno;

    end
    go

安德烈·尼科洛夫

递归计算不是 SQL Server(或任何其他数据库)的亮点。最好的解决方案是将它移出数据库并在您的应用程序中计算它。但是,如果您绝对必须在数据库中执行此操作,请使用迭代方法而不是递归方法,例如:

create function dbo.factorial(@num1 float(53))
returns float(53)
as
begin
    declare @factno bigint;

    ;With Nums As
    (
        select ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS RN
        FROM sys.objects
    )
    SELECT @factno = POWER(10.0, SUM(LOG10(RN)))
    FROM Nums
    WHERE RN <= @num1

    return @factno;
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章