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


     

  • 相关阅读:
    [BZOJ]2959: 长跑
    http状态码 超详细
    mysql注入常用函数
    tomcat7远程代码执行 ImageMagick 命令执行漏洞
    kali安装redis
    反序列化
    CSP 之dvwa
    token防爆破?
    变量覆盖
    安全狗绕过
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/1762850.html
Copyright © 2011-2022 走看看