не очень чистый (или безопасный), но выполнимый
declare @x xml = N'<r>
<SerialisedEvent>
BEGIN:VEVENT1
ATTENDEE:mailto:3ab162bc-4721-4fc2-94da-86aee8ee79eA
DESCRIPTION:Review status of infection 1
DTEND:20190701T180000
DTSTAMP:20190624T140113
DTSTART:20190701T080000
LOCATION:
SEQUENCE:0
UID:08376c46-7fae-4073-b41e-03cb4cdbb008
END:VEVENT1
</SerialisedEvent>
</r>
<r>
<SerialisedEvent>
BEGIN:VEVENT2
ATTENDEE:mailto:3ab162bc-4721-4fc2-94da-86aee8ee79eB
DESCRIPTION:Review status of infection 2
DTEND:20191025T180000
DTSTAMP:20191018T102124
DTSTART:20191025T080000
LOCATION:
SEQUENCE:0
UID:ccdf6200-097a-401f-997b-7fb6aa170cdb
END:VEVENT2
</SerialisedEvent>
</r>'
select @x
select *
from
(
select rownum,
e.el, substring(t.textvalue, charindex(e.el, t.textvalue)+len(e.el)+1, charindex(char(10), t.textvalue, charindex(e.el, t.textvalue))-charindex(e.el, t.textvalue)-len(e.el)-1) as thevalue
from
(
select
replace(n.e.value('./text()[1]', 'varchar(8000)'), char(13), char(10)) as textvalue,
row_number() over(order by (select null)) as rownum
from @x.nodes('r/SerialisedEvent') as n(e)
) as t
cross apply (values('BEGIN'),('ATTENDEE'), ('DESCRIPTION'), ('DTSTAMP'), /*(...)*/ ('UID')) as e(el)
) as src
pivot
(
max(thevalue) for el in ([BEGIN], [ATTENDEE], [DESCRIPTION], [DTSTAMP], /*(...)*/ [UID])
) as unp;