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   小分市 
     


     

  • 相关阅读:
    select,epoll,poll比较(网络资源总结)
    c++(重载、覆盖、隐藏)
    TCP状态转换图
    TCP心跳 | TCP keepAlive
    回车、换行、空格的ASCII码值—(附ASCII码表)
    C++ dlopen mini HOWTO 一篇非常好的介绍
    shell十三问
    linux IPC消息队列 的内核限制
    C++ string 类常用函数
    const用法的解惑
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/1762850.html
Copyright © 2011-2022 走看看