我爱Aspx >> Asp.Net >> 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),那么这一限制将被再次突破。
Ҷƪл˵?
自动生成sql setup.iss这个无人值..[05-20]
SQL Server无人值守安装[05-20]
SQL Server无人值守安装[05-20]
解决 SQL Server 耗尽内存的情况[05-20]
利用SQLDMO备份还原SQL SERVER[05-20]
Sql Server 常用函数[05-20]
一个用asp备份与恢复SQL Server数..[05-20]
一个用asp备份与恢复SQL Server数..[05-20]
基于SQL Server的WEB应用程序注入..[05-20]
SQL注入漏洞全接触[05-20]
如何获取 IP 用户名 等信息[05-20]
UTF-8 and Unicode FAQ[05-20]
使用ICallbackEventHandler接口实..[05-20]
不用.net和其组件用asp访问webse..[05-20]
PageTemplate(页模板)[05-20]
ASP.NET 页面对象模型[05-20]
ADO.NET中的多数据表操作之读取[05-20]
ASP.NET里的事务处理[05-20]
ASP.NET中使用Caching[05-20]
一个文件上传的类[05-20]