Рассмотрим ниже
;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, и он сообщил
Сообщение 462, уровень 16, состояние 1, процедура GetParent, строка 9
Внешнее объединение не допускается в рекурсивной части рекурсивного общего табличного выражения 'GetParentOfChild'.
Мой вопрос: почему рекурсивная часть CTE не может принять левое внешнее соединение? Это по замыслу?
Спасибо