设为首页
|
收藏本站
|
繁体中文
|
手机版
整站搜索
资讯
技巧
源码
行业
设备(待改)
资源
信息库(待改)
产品
作品(待改)
活动
培训(视频)
平台(待改)
二级(待改)
互动(作废)
交易
Access培训
-
Access开发平台
-
Access行业开发
首页
资讯
技巧
源码
行业
资源
活动
关于
资讯
公司动态
业界资讯
Access资讯
Excel资讯
Word资讯
PPT资讯
其它Office资讯
微软新闻
IT资讯
热门文章
技术垄断
盖茨欧德宁驳斥PC消亡论 ..
联想取代IBM 成为蓝牙技..
环球雅思要在08年3月上市
SQL Outer Join
WEB2.0挑战乏力 互联..
最新文章
李开复:中国高校急需根据社..
VBA编程常用语句300句
SQL基础:常用SQL语句..
ACCESS学习日记
多表查询技巧
Oracle数据库EXP、..
联系方式
Access交流网(免费Access交流)
QQ:18449932
网 址:
www.access-cn.com
当前位置:
首页
>
资讯
>
业界资讯
>
IT资讯
IT资讯
SQL在存储过程中使用递归
递归的基本概念非常简单:一段给定的代码对自身进行调用,直到某些边界条件得到满足。在本文中,我们将演示如何在T-SQL中使用递归。
在我的眼中,递归是最为精致的程序结构之一。我已经在许多场合用不同的编程语言实现过它。递归的基本概念非常简单:一段给定的代码对自身进行调用,直到某些边界条件得到满足。我将通过下面的内容展示如何在T-SQL中使用递归。我所用到的是递归的经典例子:阶乘计算。
阶乘的意思就是将小于等于这一数字的所有数字相乘,直至乘到2。例如,factorial(10)即等于10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2(你也可以加上“*1”,但似乎是多此一举)。
以下代码即实现了阶乘:
CREATE PROCEDURE [dbo].[Factorial_ap]
(
@Number Integer,
@RetVal Integer OUTPUT
)
AS
DECLARE @In Integer
DECLARE @Out Integer
IF @Number != 1
BEGIN
SELECT @In = @Number – 1
EXEC Factorial_ap @In, @Out OUTPUT
SELECT @RetVal = @Number * @Out
END
ELSE
BEGIN
SELECT @RetVal = 1
END
RETURN
GO
假设你需要计算factorial(n),这一过程将对自身调用(n-2)次。SQL Server允许调用深度高达32次的递归,但到了13次的时候,你就会遭遇到算法溢出(arithmetic overflow)警告。如果你希望计算大型数据的阶乘,你应该将变量声明为BigInt 而非Integer。这样一来你就可以计算factorial(20),结果是2,432,902,008,176,640,000。这一结果的增长是如此迅速,因而如果是计算factorial(21),那么这一限制将被再次突破。
尽管阶乘机制非常美妙,但在日常编程中似乎没有多少机会用到。然而,上面的代码还是精确的展示了递归的基本原理和具体的实践。
在一些实际问题中,递归都将是一种有价值的编程技巧。其中一个经典的编程问题名为“Bill of Materials(用料单)”。该问题有至少两种应用:
给出所需对象的一个实例,求出构造此实例的用料单;
指定组成某个对象的若干对象的详细目录,求出能够构造出多少对象?
现在让我们来假设我们已经有了对象O,它是由四个X对象和三个Y对象以及七个Z对象组成。因此,要构造一个单独的O对象显然我们将会需要四个X对象、三个Y对象和七个Z对象。然而,对象Y和Z都需要一定数量的Q对象(例如对螺丝指定周长、螺栓样式、螺帽样式)。因此我们需要分析对象Y和X,确定它们所需要的Q对象个数,然后再确定我们能提供相应总数。如果不能,那么我们将无法创建对象Q。
SQL Server 2000无法较方便的解决这一问题,除非你能够提前知道递归层次。然而,SQL 2005测试版在这一问题上已经进行了很长时间的研究。SQL项目负责人Joe Celko提供了非常巧妙的解决办法,该办法涉及到在行插入(row-insert)时间对递归层次进行跟踪。这一解决方案非常有用,但需要使用触发器或类似机制通过每一次插入、更新或删除来更新层次深度队列。你可以查看这种方法在Access下的实现。随后就可以方便的将这种解决方案引入到SQL Server中,并根据自己的需要进行修改。
发布人:Grant-Access开发者
分享到:
点击次数:
更新时间:2006-11-06 21:58:49 【
打印此页
】 【
关闭
】
上一篇:
微软推“虚拟3D地球”服务 挑战Google Earth
下一篇:
福克斯搭车PS3 X战警3蓝光影碟公布
相关文章
•
李开复:中国高校急需根据社会需求培养学生
•
VBA编程常用语句300句
•
SQL基础:常用SQL语句详解 (转)
•
ACCESS学习日记
•
多表查询技巧
•
Oracle数据库EXP、IMP命令语句使用方法
•
SQL注入的高级应用ACCESS篇!
•
代码打开页面设置
热门文章
[2006-07-26]
2010年IT的热门和冷门职业
[2006-09-18]
SQL Count
[2005-03-27]
中国女专家密码专家破解在国际上广泛应用的两大密码算法MD5、SHA-1,电子签名可以伪造
[2005-03-23]
雅虎准备在华打持久战 战略重心正向中国转移
[2006-10-24]
苹果最新iPod无线功能专利
[2006-11-14]
中国酝酿手机行业标准化 手机像电脑DIY
热门产品