Jag tycker att din logik i princip var ok. Här är två förbättringar. För det första är nivån inkrementell så att du kan se vad som händer med rekursionen. För det andra använder den en explicit join:
With BMStudy as (
select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
from BM010115 bm
where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
UNION ALL
select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
from BMStudy ba join
BM010115 bb
on ba.cpn_i = bb.ppn_i
where bb.BOMNAME_I like ''
)
select * from BMStudy;
Jag misstänker att ditt problem är tillståndet where bb.BOMNAME_I like ''
. Är det möjligt att detta värde verkligen är NULL
snarare än tomt?
Du bör också kontrollera vad den här icke-rekursiva frågan på en nivå nedåt gör:
select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
from BM010115 ba join
BM010115 bb
on ba.cpn_i = bb.ppn_i
where bb.BOMNAME_I like '' and
(ba.PPN_I like '0123105-HWT' and ba.BOMNAME_I like '')