Prøv dette:
declare @t table (
childID int,
ParentID int,
level int
)
insert into @t
select 71, 154, 4
union
select 154, 192, 3
union
select 192, 209, 2
union
select 209, 0, 1
Declare @SearchChild int
set @SearchChild=71
;with MyCTE as (
select t1.childID, t1.ParentID , @SearchChild AS searchChild, t1.level
from @t t1
where t1.childID = @SearchChild
UNION ALL
select t1.childID, t1.ParentID , c.SearchChild, t1.level
from @t t1
inner join MyCTE c on t1.childID=c.ParentID
)
select top 1 * from MyCTE order by level asc
OUTPUT:
childID ParentID searchChild level
----------- ----------- ----------- -----------
209 0 71 1
Jeg er ikke sikker på, hvad du leder efter, er der ingen række, der har 209 og 71 sammen? dette er det bedste du kan gøre. Denne CTE arbejder også op i kæden og ikke ned, og burde fungere meget bedre på store borde.