回 帖 发 新 帖 刷新版面

主题:存储过程, 找根节点

我在数据库里面存放树结构,结构字段如下
node_id          int      //节点id
parentNode_id    int      //父节点id
node_text        varchar  //节点内容
isModule         bit      //是否叶子节点
能否通过做一个存储过程,
用以输出所有根节点?

回复列表 (共3个回复)

沙发

这个 ,  有些思路。  
请等一下, 我写写试试。

板凳

create procedure sp_test
as
begin
   select
       a.node_id,
       a.parentNode_id,
       a.node_text,
       b.node_id   as ancestor_id  ,
       b.node_text as ancestor_text      
   into
       #t
   from
       xkb_treeNode a,xkb_treeNode b
   where
       a.parentNode_id = b.node_id and a.isModule = 1  
   
   while(exists(select 1 from xkb_treeNode a,#t b where a.node_id=ancestor_id and a.parentNode_id != -1))
   begin
       update #t
       set
           ancestor_id   = b.p_id,
           ancestor_text = b.p_text
       from
           #t a,
           (select
               c.node_id,
               d.node_id as p_id,
               d.node_text as p_text
            from
               xkb_treeNode c,xkb_treeNode d
            where
               c.parentNode_id = d.node_id) b
       where
           a.ancestor_id = b.node_id
   end
   
   select * from #t order by node_id
end

3 楼

真是太感谢了 。    

呵呵 忙死我了

我来回复

您尚未登录,请登录后再回复。点此登录或注册