Вы можете попробовать что-то вроде ниже, где, как только вы передадите дочерний numericId, вы получите соответствующих родителей, а оттуда рекурсивно вы получите более высокие уровни.
Вы можете отфильтровать уровни с помощью фильтра родительского уровня.
DECLARE @childNumericId AS INT
;WITH CTE_Ancestory AS (
SELECT numericId AS child, ParentId1 as father, parentId2 as mother, 1 as parentlevel
FROM tableName
WHERE numericId = @childNumericId
UNION ALL
SELECT t.NumericId AS child, t.ParentId1 as father, t.parentId2 as mother, c.parentlevel + 1 AS parentLevel
FROM tableName AS t
INNER JOIN CTE_Ancestory AS c ON t.numericId IN (c.father, c.mother)
)
SELECT *
from CTE_Ancestory
Where parentlevel < 4 -- number of levels you need