sqlserver中存储过程的递归调用示例

递归式指代码片段调用自身的情况;危险之处在于:如果调用了自身一次,那么如何防止他反复地调用自身。也就是说提供递归检验来保证适当的时候可以跳出。

以阶层为例子说存储过程中递归的调用。

递归

CREATE PROC [dbo].[usp_spFactorial]
@InputValue INT,
@OuputValue INT OUTPUT
AS
BEGIN
   DECLARE @InValue  INT;
   DECLARE @OutValue  INT;
    IF(@InputValue!=1)
      BEGIN
         SET @InValue = @InputValue - 1;
         EXEC spFactorial @InValue,@OutValue OUTPUT;
         SELECT @OuputValue = @InputValue * @OutValue;
      END
    ELSE
      BEGIN
      SET @OuputValue = 1;
      END
END

当创建此存储过程时候,会遇见一条报告信息

(0)

相关推荐

  • sqlserver另类非递归的无限级分类(存储过程版)

    下面是我统计的几种方案: 第一种方案(递归式): 简单的表结构为: CategoryID int(4), CategoryName nvarchar(50), ParentID int(4), Depth int(4) 这样根据ParentID一级级的运用递归找他的上级目录. 还有可以为了方便添加CategoryLeft,CategoryRight保存他的上级目录或下级目录 第二种方案: 设置一个varchar类型的CategoryPath字段来保存目录的完整路径,将父目录id用符号分隔开来.比

  • SQLSERVER2005 中树形数据的递归查询

    问题描述.借用了adinet的问题.参见:http://www.jb51.net/article/28670.htm 今天做项目遇到一个问题, 有产品分类A,B,C顶级分类, 期中A下面有a1,a2,a3子分类. 但是a1可能共同属于A和B,然后我的数据库是这样设计的       id           name         parnet   1 A 0 2 B 0 3 a1 1,2 如果想要查询A的所有子类的话就要查询parent中包含1的,所以就萌生了这个办法.呵呵,解决方案 复制代码

  • SQLserver2008使用表达式递归查询

    复制代码 代码如下: --由父项递归下级 with cte(id,parentid,text) as (--父项 select id,parentid,text from treeview where parentid = 450 union all --递归结果集中的下级 select t.id,t.parentid,t.text from treeview as t inner join cte as c on t.parentid = c.id ) select id,parentid,t

  • Sql学习第三天——SQL 关于CTE(公用表达式)的递归查询使用

    关于使用CTE(公用表表达式)的递归查询----SQL Server 2005及以上版本 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式. 当某个查询引用递归 CTE 时,它即被称为递归查询.递归查询通常用于返回分层数据,例如:显示某个组织图中的雇员或物料清单方案(其中父级产品有一个或多个组件,而那些组件可能还有子组件,或者是其他父级产品的组件)中的数据. 递归 C

  • 使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法

    下面是一个简单的Family Tree 示例: 复制代码 代码如下: DECLARE @TT TABLE (ID int,Relation varchar(25),Name varchar(25),ParentID int) INSERT @TT SELECT 1,' Great GrandFather' , 'Thomas Bishop', null UNION ALL SELECT 2,'Grand Mom', 'Elian Thomas Wilson' , 1 UNION ALL SELE

  • 使用SqlServer CTE递归查询处理树、图和层次结构

    CTE(Common Table Expressions)是从SQL Server 2005以后版本才有的.指定的临时命名结果集,这些结果集称为CTE. 与派生表类似,不存储为对象,并且只在查询期间有效.与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次.使用CTE能改善代码可读性,且不损害其性能. 递归CTE是SQL SERVER 2005中重要的增强之一.一般我们在处理树,图和层次结构的问题时需要用到递归查询. CTE的语法如下 WITH CTE AS ( SELECT Em

  • sqlserver中存储过程的递归调用示例

    递归式指代码片段调用自身的情况:危险之处在于:如果调用了自身一次,那么如何防止他反复地调用自身.也就是说提供递归检验来保证适当的时候可以跳出. 以阶层为例子说存储过程中递归的调用. 递归 CREATE PROC [dbo].[usp_spFactorial] @InputValue INT, @OuputValue INT OUTPUT AS BEGIN DECLARE @InValue INT; DECLARE @OutValue INT; IF(@InputValue!=1) BEGIN S

  • C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例

    本文实例讲述了C# Ado.net读取SQLServer数据库存储过程列表及参数信息的方法.分享给大家供大家参考,具体如下: 得到数据库存储过程列表: select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name 得到某个存储过程的参数信息:(SQL方法) select * from syscolumns where ID in (SELECT id FROM sysobjects

  • [J2SE]Java中3DES加密解密调用示例

    jce.jar security/US_export_policy.jar security/local_policy.jar ext/sunjce_provider.jar Java运行时会自动加载这些包,因此对于带main函数的应用程序不需要设置到CLASSPATH环境变量中.对于WEB应用,不需要把这些包加到WEB-INF/lib目录下. 以下是java中调用sun公司提供的3DES加密解密算法的样本代码: 复制代码 代码如下: /*字符串 DESede(3DES) 加密*/ import

  • JavaScript中匿名函数的递归调用

    不管是什么编程语言,相信稍微写过几行代码的同学,对递归都不会陌生. 以一个简单的阶乘计算为例: function factorial(n) { if (n <= 1) { return 1; } else { return n * factorial(n-1); } } 我们可以看出,递归就是在函数内部调用对自身的调用. 那么问题来了,我们知道在Javascript中,有一类函数叫做匿名函数,没有名称,怎么调用呢?当然你可以说,可以把匿名函数赋值给一个常量: const factorial =

  • C#函数式编程中的递归调用之尾递归详解

    关于递归相信大家已经熟悉的不能再熟悉了,所以笔者在这里就不多费口舌,不懂的读者们可以在博客园中找到很多与之相关的博客.下面我们直接切入正题,开始介绍尾递归. 尾递归 普通递归和尾递归如果仅仅只是从代码的角度出发来看,我们可能发现不了他的特点,所以笔者利用两张堆栈上的图来展示具体的差距在哪,首先我们来看看普通的递归调用的情况,如下图1.1所示: 假设这里执行的函数是Func1,并且Func1中通过递归调用了自己,那么我们可以看到栈上在每次调用Func1的时候都会重新将函数返回地址等其他参数放入栈中

  • python递归调用中的坑:打印有值, 返回却None

    今天给大家分享小编遇到的一个坑有关python递归调用中的坑:打印有值, 返回却None问题. 问题: 前几天写一个小面试题, 忽然有个惊悚的发现, 如下: s1 = 'abcdefg' def right_shift(s, n): """ 把传入的字符串,前n个字符移动到最后面 """ if n < 1: print(s) # 此步输出结果为 "efgabcd" return s s = s[1:] + s[0] n

  • php+jQuery递归调用POST循环请求示例

    本文实例讲述了php+jQuery递归调用POST循环请求的方法.分享给大家供大家参考,具体如下: jQuery 代码部分: $(function(){ _post('demo.php',{userid:'PHP'}); }); function _post(url,post){ $.post(url,post,function(data){ if(data.status){ _post(data.back.url,data.back.data); } },"json"); } PHP

  • SpringBoot中整合MyBatis-Plus的方法示例

    MyBatis 框架相信大家都用过,虽然 MyBatis 可以直接在 xml 中通过 SQL 语句操作数据库,很是灵活.但正其操作都要通过 SQL 语句进行,就必须写大量的 xml 文件,很是麻烦.于是 MyBatis-Plus 应运而生,作为 MyBatis 的增强工具,更是为我们开发效率得到了质的飞跃. 一.简介 1.MyBatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工

  • PHP递归调用的小技巧讲解

    在PHP的实际编码中,当我们需要实现多元数组替换功能时,就会遇到PHP递归调用.那么具体的使用方式是怎样的呢?下面我们将通过一段代码示例来具体分析一下实现这以功能的方法. PHP递归调用实现多元数组替换功能代码示例: 复制代码 代码如下: < ?php   $arr = array(array("< 小刚>","< 小晓>"),"< 小飞>","< 小李>","&

  • php递归使用示例(php递归函数)

    //递归获得角色ID字符串 function explodeRole($roleObj, &$resultStr){ if(0 < count($roleObj->childRoleObjArr)){ foreach($roleObj->childRoleObjArr as $childRoleObj){ if('' == $resultStr){ $resultStr .= "{$childRoleObj->id}"; }else{ $resultSt

随机推荐