树状sql--采用递归方式获取节点
Posted 九幽旋律
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树状sql--采用递归方式获取节点相关的知识,希望对你有一定的参考价值。
创建数据库
create table City
(
id varchar(3) primary key ,
pid varchar(3) ,
name varchar(10)
)
插入数据
insert into City values(\'001\' , null , \'广东省\');
insert into City values(\'002\' , \'001\' , \'广州市\');
insert into City values(\'003\' , \'001\' , \'深圳市\') ;
insert into City values(\'004\' , \'002\' , \'天河区\') ;
insert into City values(\'005\' , \'003\' , \'罗湖区\');
insert into City values(\'006\' , \'003\' , \'福田区\') ;
insert into City values(\'007\' , \'003\' , \'宝安区\') ;
insert into City values(\'008\' , \'007\' , \'西乡镇\') ;
insert into City values(\'009\' , \'007\' , \'龙华镇\');
insert into City values(\'010\' , \'007\' , \'松岗镇\');
insert into City values(\'011\' , null , \'中国\');
递归子节点的存储过程:
create proc ProcCity
@id nvarchar(36)
as
begin
with cte as
(
select a.id,a.name,a.pid from City a where id=@id
union all
select k.id,k.name,k.pid from City k inner join cte c on c.id = k.pid
)select * from cte
end
获取深圳以及深圳的所有区:exec ProcCity \'003\'
递归父节点的存储过程:
create proc ProcCity
@id nvarchar(36)
as
begin
with cte as
(
select a.id,a.name,a.pid from City a where id=@id
union all
select k.id,k.name,k.pid from City k inner join cte c on k.id = c.pid
)select * from cte
end
获取深圳以及深圳的所有父节点:exec ProcCity \'003\'
以上是关于树状sql--采用递归方式获取节点的主要内容,如果未能解决你的问题,请参考以下文章