Можно ли выполнить соединение между двумя вызовами T-SQL nodes()
, отфильтровав второй nodes()
на основе узла контекста первого?
В приведенном ниже примере я пытаюсь вернуть таблицу, показывающую PersonID
, Name
и Position
. Моя попытка сослаться на @id
узла контекста первого nodes()
во втором операторе XQuery nodes()
не работает. Названия позиций не возвращаются.
Любые идеи?
Благодарю вас!
DECLARE @xml xml = '<Root>
<People>
<Person id="1">Frank</Person>
<Person id="2">Joe</Person>
</People>
<Positions>
<Position assignedToPerson="1">Engineer</Position>
<Position assignedToPerson="2">Manager</Position>
</Positions>
</Root>'
SELECT
PersonID = person.value('@id', 'NVARCHAR(50)'),
Name = person.value('.', 'NVARCHAR(50)'),
positionTitle = position.value('Position[1]', 'NVARCHAR(50)')
FROM
@xml.nodes('/Root/People/Person') People(person)
OUTER APPLY
@xml.nodes('/Root/Positions/Position[@assignedToPerson=.[@id]]') Positions(position)