设为首页
|
收藏本站
|
繁体中文
|
手机版
整站搜索
资讯
技巧
源码
行业
设备(待改)
资源
信息库(待改)
产品
作品(待改)
活动
培训(视频)
平台(待改)
二级(待改)
互动(作废)
交易
Access培训
-
Access开发平台
-
Access行业开发
首页
资讯
技巧
源码
行业
资源
活动
关于
资讯
公司动态
业界资讯
Access资讯
Excel资讯
Word资讯
PPT资讯
其它Office资讯
微软新闻
IT资讯
热门文章
中国第一乞讨网遭质疑被关闭
英特尔台式机CPU大降价 ..
软件服务网络化成趋势 瑞星..
长城电脑入围06年国家远教..
国家最高科技奖获得者 激光..
上半年爱立信共获中移动总值..
最新文章
李开复:中国高校急需根据社..
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-01-01]
中国政府网1月1日正式开通 设中文简繁体和英文版
[2006-08-21]
比亚迪抛出“袋鼠”模式 要造电动车和跑车
[2005-04-06]
中国工程院院士倪光南:中国还不是知识产权大国
[2006-02-07]
信产部发文整治短信违规 六类行为重点打击
[2006-08-23]
日本富商体检不合格 难圆“太空梦”[组图]
[2006-09-25]
国际芯片市场格局待变
热门产品