在SQL的树型结构中,很多时候,知道某一节点的值,需要查找该节点的所有子节点(包括多级)的功能,这时就需要用到如下的用户自定义函数.

表结构如下:

ID int
Dep_Type int
Dep_Code varchar(50)
Dep_Name varchar(50)
Dep_Dian int
Dep_FathID int
Dep_Opera varchar(50)
Dep_Status int
Dep_AddTime datetime

用户自定义函数如下:

create function f_getChild(@ID VARCHAR(10)) 
returns @t table(ID VARCHAR(10),PID VARCHAR(10),Level INT) 
as 
begin 
    declare @i int,@ret varchar(8000) 
    set @i = 1 
    insert into @t select ID,Dep_FathID,@i from H_Dep_Info where Dep_FathID = @ID 
    while @@rowcount<>0 
    begin 
      set @i = @i + 1 
      insert into @t select a.ID,a.Dep_FathID,@i from H_Dep_Info a,@t b where a.Dep_FathID=b.ID and b.Level = @i-1 
    end 
    return 
end

执行操作如下:

select ID from f_getChild(1)

返回值就是所有的子节点

查找父节点的函数如下:

CREATE FUNCTION [f_getParent](@id int) 
  RETURNS @re TABLE(id int,pid int,level int) 
  AS 
  begin 
  declare @level int 
  set @level = 1 
  declare @pid int 
  select @pid = pid from tb where id = @id 
  insert @re 
  select id,pid,@level from tb where id = @pid 
  while @@rowcount > 0   
  begin 
  set @level = @level + 1 
  select @pid = pid from tb where id = @pid 
  insert @re 
  select id,pid,@level from tb where id = @pid 
  end 
  return 
  end

执行操作如下:

select * from f_getParent(8)

返回的列有id,pid,level

其中id就是8的父节点,pid就是id的父节点,level就是级数(表示这个id是8的第几级你节点)

SQL 递归找查所有子节点及所有父节的更多相关文章

  1. sql 递归查询,查出所有子节点

    with t as ( select b.* from Base_Department b where ParentId = 'cce4152c-3483-4334-b68d-155da627bca0 ...

  2. 递归遍历所有xml的节点及子节点

    import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; i ...

  3. [SQL]T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)

    T-Sql 递归查询(给定节点查所有父节点.所有子节点的方法)   -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ ...

  4. mysql 递归查找菜单节点的所有子节点

    背景                                                                                                   ...

  5. SQL查询树形结构的所有子节点

    如下一张表test:id name pid----------- ---------- -----------1 电器 NULL2 家电 13 冰箱 24 洗衣机 25 电脑 16 笔记本 57 平板 ...

  6. SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数

    ---SQL SERVER 2000 遍历父子关系數據表(二叉树)获得所有子节点 所有父节点及节点层数函数---Geovin Du 涂聚文--建立測試環境Create Table GeovinDu([ ...

  7. dom4j递归解析XML字符串所有子节点

    /** * dom4j递归解析所有子节点 * * @param childElements * @param mapEle * @return */ public Map<String, Obj ...

  8. T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)

    -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ParamType_V2_0 where Type_Id=316-- ...

  9. SQL 递归树 子父节点相互查询

    if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...

随机推荐

  1. 卸载vs2017

    卸载enterprise版本 Microsoft.FSharp.SDK.Core卸载失败Package 'Microsoft.FSharp.SDK.Core,version=15.7.20180605 ...

  2. java web项目去除项目名称访问设置方法及tomcat的<Host>标签讲解

    本文为博主原创,未经允许不得转载. 在集群项目中,为了方便用户可以更快捷的访问,即只需要输入IP和端口号,就可以直接访问项目,因为 模块比较多,记住项目名称并不容易,所以在网上查看和学习了下设置的方法 ...

  3. Tex: The top-level auxiliary file: *.aux I couldn't open style file IEEEtran.bst 解决方法

    参考: Bibliography is not printed using Kile on Ubuntu Tex: The top-level auxiliary file: *.aux I coul ...

  4. UVa 10285 最长的滑雪路径(DAG上的最长路)

    https://vjudge.net/problem/UVA-10285 题意: 在一个R*C的整数矩阵上找一条高度严格递减的最长路.起点任意,但每次只能沿着上下左右4个方向之一走一格,并且不能走出矩 ...

  5. python PIL 图像处理库简介(一)

    1. Introduction     PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处 ...

  6. Could NOT find Bullet (missing: BULLET_DYNAMICS_LIBRARY BULLET_COLLISION_LIBRARY BULLET_MATH_LIBRARY BULLET_SOFTBODY_LIBRARY BULLET_INCLUDE_DIR)

    rosdep where-defined bullet sudo apt-get install libbullet-dev

  7. Qt5.3.2(VS2010)_调试_查看变量值

    1.菜单栏 -->控件(W) --> 视图 2.在"Debug"状态下,选择一个变量(或者 按住左键 选择变量及其属性/方法)--> 右键 --> 添加表达 ...

  8. Java 8 Lambda实现原理分析

    PDF文档已上传Github  Github:https://github.com/zwjlpeng/Angrily_Learn_Java_8 为了支持函数式编程,Java 8引入了Lambda表达式 ...

  9. cookie session localstorage sessionStorage区别

    cookie:http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html 重要特点: 1.cookie 有大小设置,有过期时间设 ...

  10. 关于angular5的惰性加载报错问题

    之前为了测试一个模块优化问题,于是用angular-cli快速搭建了个ng5的脚手架demo,在应用惰性加载功能的时候发现浏览器报错如下: ERROR Error: Uncaught (in prom ...