Рассмотрим ниже
;WITH GetParentOfChild AS
(
SELECT
Rn = ROW_NUMBER() Over(Order By (Select 1))
,row_id AS Parents
,parent_account_id As ParentId
FROM siebelextract..account
WHERE row_id = @ChildId
UNION ALL
SELECT
Rn + 1
,a.row_id as Parents
,a.parent_account_id As ParentId
FROM siebelextract..account a
JOIN GetParentOfChild gp on a.row_id = gp.ParentId
)
SELECT TOP 1 @ChildId = Parents
FROM GetParentOfChild
ORDER BY Rn DESC
Что он делает, так это то, что для любого дочернего элемента он возвращает родительский элемент корневого уровня ....Программа прекрасно работает все время ...
Просто из любопытства / экспериментов я изменил JOIN на Left Outer Join, и он сообщил
Msg 462, Level 16, State 1, Procedure GetParent, Line 9 Внешнее соединение не допускается в рекурсивной части рекурсивного общего табличного выражения GetParentOfChild.
У меня вопрос: почему рекурсивная часть CTE не может принимать левое внешнее соединение? Это задумано?
Спасибо