• SQL 递归找查所有子节点及所有父节


    在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的第几级你节点)

  • 相关阅读:
    6. 复习complex类的实现过程
    英文文献写作注意事项
    5. 操作符重载与临时对象
    4. 参数传递与返回值
    3. 构造函数
    JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List<T>转JSON,JSON转List<T>,JSON转C#对象
    JSON.NET 使用技巧
    异常处理 Exception
    HTTP报文
    HttpWebRequest类
  • 原文地址:https://www.cnblogs.com/andycai/p/3928969.html
Copyright © 2020-2023  润新知