• λ我爱Aspx >> Asp.Net >> SQL在存储过程中使用递归
  • SQL在存储过程中使用递归

  • :未知  Դ:internet  :2007-5-20 16:44:46  ؼ:sql
  • SQL在存储过程中使用递归

    递归的基本概念非常简单:一段给定的代码对自身进行调用,直到某些边界条件得到满足。在本文中,我们将演示如何在T-SQL中使用递归。

    在我的眼中,递归是最为精致的程序结构之一。我已经在许多场合用不同的编程语言实现过它。递归的基本概念非常简单:一段给定的代码对自身进行调用,直到某些边界条件得到满足。我将通过下面的内容展示如何在T-SQL中使用递归。我所用到的是递归的经典例子:阶乘计算。

    阶乘的意思就是将小于等于这一数字的所有数字相乘,直至乘到2。例如,factorial(10)即等于10*9*8*7*6*5*4*3*2(你也可以加上“*1”,但似乎是多此一举)。

    以下代码即实现了阶乘:

    CreatePROCEDURE[dbo].[Factorial_ap]

    (

    @NumberInteger,

    @RetValIntegerOUTPUT

    )

    AS

    DECLARE@InInteger

    DECLARE@OutInteger

    IF@Number!=1

    BEGIN

    Select@In=@Number–1

    EXECFactorial_ap@In,@OutOUTPUT

    Select@RetVal=@Number*@Out

    END

    ELSE

    BEGIN

    Select@RetVal=1

    END

    RETURN

    GO

    假设你需要计算factorial(n),这一过程将对自身调用(n-2)次。SQLServer允许调用深度高达32次的递归,但到了13次的时候,你就会遭遇到算法溢出(arithmeticoverflow)警告。如果你希望计算大型数据的阶乘,你应该将变量声明为BigInt而非Integer。这样一来你就可以计算factorial(20),结果是2,432,902,008,176,640,000。这一结果的增长是如此迅速,因而如果是计算factorial(21),那么这一限制将被再次突破。

    Ҷƪл˵?
  • һƪ存储过程分页
    һƪ如何获取 IP 用户名 等信息