设为首页
|
收藏本站
|
繁体中文
|
手机版
整站搜索
资讯
技巧
源码
行业
设备(待改)
资源
信息库(待改)
产品
作品(待改)
活动
培训(视频)
平台(待改)
二级(待改)
互动(作废)
交易
Access培训
-
Access开发平台
-
Access行业开发
首页
资讯
技巧
源码
行业
资源
活动
关于
资讯
公司动态
业界资讯
Access资讯
Excel资讯
Word资讯
PPT资讯
其它Office资讯
微软新闻
IT资讯
热门文章
真实再现,微软LifeCa..
"最受赞赏的中国..
微软签约国内PC厂商大出血..
Google推教育资源门户..
CNN评出:25年来人类2..
Google推出免费互联网..
最新文章
李开复:中国高校急需根据社..
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-10-13]
Google推教育资源门户网站 继续细化业务范围
[2005-07-12]
体制成本双双制约 移动数字电视遭遇推广难题
[2006-09-22]
双核电脑
[2006-09-12]
马云:互联网有10年"高潮期" 要进世界前三强
[2005-09-16]
我国05年底前政府机关要实现全部使用正版软件
[2006-09-17]
苏州电博会10月18日举行 台湾IT企业料续唱主角
热门产品