среда, 10 июля 2013 г.

Получение данных родительского XML-узла в T-SQL

Недавно мне пришлось решать одну задачу, в рамках которой возникла необходимость выбора родительского узла в XML дереве и все это в рамках SQL-запроса. Как оказалось, сделать это не так трудно - в T-SQL есть "магическое" XPATH-выражение для получения родительского узла: 'parent::*'.
В результате получается следующее:
declare @x xml
-- ...
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)
Вот и все. Надеюсь кому-то это пригодится.

Комментариев нет: