zoukankan      html  css  js  c++  java
  • 查找指定节点的所有父节点的示例函数

    CREATE FUNCTION f_Pid(@ID char(3))  
     
    RETURNS @t_Level TABLE(ID char(3),Level int)  
     
    AS  
     
    BEGIN  
     
        DECLARE @Level int 
     
        SET @Level=1  
     
        INSERT @t_Level SELECT @ID,@Level  
     
        WHILE @@ROWCOUNT>0  
     
        BEGIN  
     
            SET @Level=@Level+1  
     
            INSERT @t_Level SELECT a.PID,@Level  
     
            FROM tb a,@t_Level b  
     
            WHERE a.ID=b.ID  
     
                AND b.Level=@Level-1  
     
        END  
     
        RETURN  
     
    END  
     
    GO  
     
     
     
     
     

     
    CREATE FUNCTION f_Pid(@ID char(3))  
     
    RETURNS @t_Level TABLE(ID char(3))  
     
    AS  
     
    BEGIN  
     
        INSERT @t_Level SELECT @ID  
     
        SELECT @ID=PID FROM tb  
     
        WHERE ID=@ID  
     
            AND PID IS NOT NULL  
     
        WHILE @@ROWCOUNT>0  
     
        BEGIN  
     
            INSERT @t_Level SELECT @ID  
     
            SELECT @ID=PID FROM tb  
     
            WHERE ID=@ID  
     
                AND PID IS NOT NULL  
     
        END  
     
        RETURN  
     
    END  
    </PRE>  
    <PRE class="csharp" name="code"><PRE class="ql" name="code">树形数据深度排序处理示例(递归法)  
     
    --测试数据  
     
    CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))  
     
    INSERT tb SELECT '001',NULL ,'山东省' 
     
    UNION ALL SELECT '002','001','烟台市' 
     
    UNION ALL SELECT '004','002','招远市' 
     
    UNION ALL SELECT '003','001','青岛市' 
     
    UNION ALL SELECT '005',NULL ,'四会市' 
     
    UNION ALL SELECT '006','005','清远市' 
     
    UNION ALL SELECT '007','006','小分市' 
     
    GO  
     
     
     
    --广度搜索排序函数  
     
    CREATE FUNCTION f_Sort(@ID char(3)=NULL,@sort int=1)  
     
    RETURNS @t_Level TABLE(ID char(3),sort int)  
     
    AS  
     
    BEGIN  
     
        DECLARE tb CURSOR LOCAL  
     
        FOR  
     
        SELECT ID FROM tb  
     
        WHERE PID=@ID  
     
            OR(@ID IS NULL AND PID IS NULL)  
     
        OPEN TB  
     
        FETCH tb INTO @ID  
     
        WHILE @@FETCH_STATUS=0  
     
        BEGIN  
     
            INSERT @t_Level VALUES(@ID,@sort)  
     
            SET @sort=@sort+1  
     
            IF @@NESTLEVEL<32 --如果递归层数未超过32层(递归最大允许32层)  
     
            BEGIN  
     
                --递归查找当前节点的子节点  
     
                INSERT @t_Level SELECT * FROM f_Sort(@ID,@sort)  
     
                SET @sort=@sort+@@ROWCOUNT  --排序号加上子节点个数  
     
            END  
     
            FETCH tb INTO @ID  
     
        END  
     
        RETURN  
     
    END  
     
    GO  
     
     
     
    --显示结果  
     
    SELECT a.*  
     
    FROM tb a,f_Sort(DEFAULT,DEFAULT) b  
     
    WHERE a.ID=b.ID  
     
    ORDER BY b.sort  
     
    /*--结果 
     
    ID   PID   Name        
     
    ------ --------- ----------  
     
    001  NULL 山东省 
     
    002  001   烟台市 
     
    004  002   招远市 
     
    003  001   青岛市 
     
    005  NULL 四会市 
     
    006  005   清远市 
     
    007  006   小分市 
     


     

  • 相关阅读:
    工作流
    工作流管理系统
    Domino(群组工作软件)
    Integer与int的区别(转)
    Java NIO和IO的区别(转)
    String、StringBuffer与StringBuilder之间区别(转)
    JAVA 是否会发生内存泄露(转)
    Java关键字final、static使用总结(转)
    数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)(转)
    Java多线程:用三个线程控制循环输出10次ABC
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/1762850.html
Copyright © 2011-2022 走看看