Недавно мне пришлось решать одну задачу, в рамках которой возникла необходимость выбора родительского узла в XML дереве и все это в рамках SQL-запроса.
Как оказалось, сделать это не так трудно - в T-SQL есть "магическое" XPATH-выражение для получения родительского узла: 'parent::*'.
В результате получается следующее:
declare @x xml
-- ...
select @x.query('/Document/A/parent::*')
-- ...
select @x.query('/Document/A/parent::*')
Или можно чуть посложнее - для всех узлов B выбрать узел C, входящий в родительский узел от родительского узла для узла B (прародитель):
select
T.b.value('parent::*/parent::*/C', 'nvarchar(50)')
from @x.nodes('//Document/A/B') T(b)
Вот и все. Надеюсь кому-то это пригодится.