试试这个:
create table DemoTable
(
accountid bigint
,parentid bigint
,accountname nvarchar(128)
)
insert DemoTable(accountid,parentid,accountname)
select 1, null, 'Root'
union select 2, 1, 'Child1'
union select 3, 1, 'Child2'
union select 4, 1, 'Child3'
union select 5, 2, 'Child1.1'
union select 6, 2, 'Child1.2'
go
declare @findMe bigint = 6;
with myCTE as
(
select accountid,parentid,accountname,1 hierarchyLevel
from DemoTable
where accountid = @findMe
union all
select b.accountid,b.parentid,b.accountname, a.hierarchyLevel + 1
from myCTE a
inner join DemoTable b
on b.accountid = a.parentid
)
select * from myCTE
order by hierarchyLevel