在 SQL Server 2008 中,假设您的表名为 Hierarchical_Test1,并且包含字段“id、name、parent_id”,以下查询用于检索每个元素所在的级别:
with family_tree (parent_id, id, name, level) AS
(
-- Anchor member definition
select f.parent_id, f.id, f.name, 0 as level
from dbo.Hierarchical_Test1 f
where f.parent_id=0
union all
-- Recursive member definition
select f2.parent_id, f2.id, f2.name, level + 1
from dbo.Hierarchical_Test1 as f2
inner join family_tree as f3
on f2.parent_id = f3.id
)
-- Statement that executes the CTE
select parent_id, id, name, level
from family_tree
这个可以让你得到一个元素的所有祖先:
with family_tree (parent_id, id, name, level, parent_path) AS
(
-- Anchor member definition
select f.parent_id, f.id, f.name, 0 as level,
CAST('/' as varchar(255)) as parent_path
from dbo.Hierarchical_Test1 f
where f.parent_id=0
union all
-- Recursive member definition
select f2.parent_id, f2.id, f2.name, level + 1,
CAST(
CAST('/' as varchar(255))
+ CAST(f2.parent_id as varchar(255))
+ CAST(f3.parent_path as varchar(255))
as varchar(255))
from dbo.Hierarchical_Test1 as f2
inner join family_tree as f3
on f2.parent_id = f3.id
)
-- Statement that executes the CTE
select parent_id, id, name, level, parent_path
from family_tree