Select multiple XML nodes out of each row in a SQL table

CodeMinder: to remind myself of stuff that I usually have to look up each time I do it.

If a People table has a column named XML, and the XML column may specify multiple PersonAlternativeName entities, then to get all PersonAlternativeNames in a single result set use CROSS APPLY or OUTER APPLY.

with xmlnamespaces(
    '' as px,
    '' as n)
select p.PersonId,
    n.value('(n:PersonGivenName)[1]', 'varchar(100)') as FN,
    n.value('(n:PersonMiddleName)[1]', 'varchar(100)') as MN,
    n.value('(n:PersonSurName)[1]', 'varchar(100)') as LN
from People p
cross apply XmlColumn.nodes('//px:PersonAlternateName') as ppl(n)


Comments !