Ho un valore XML come questo:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
</R>
Voglio per concatenare tutti i I
valori e restituirli come una singola stringa: ABC...
.
Ora so che posso distruggere l'XML, aggregare i risultati come XML senza nome e applicare .values('text()[1]', ...)
al risultato:
SELECT
(
SELECT
n.n.value('text()[1]', 'varchar(50)') AS [text()]
FROM
@MyXml.nodes('/R/I') AS n (n)
FOR XML
PATH (''),
TYPE
).value('text()[1]', 'varchar(50)')
;
Tuttavia, vorrei fare tutto ciò utilizzando solo i metodi XPath / XQuery, qualcosa del genere:
SELECT @MyXml. ? ( ? );
C'è un modo simile?
Il motivo per cui sto cercando una soluzione in questa direzione è perché il mio XML reale contiene anche altri elementi, ad esempio:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
<J>X</J>
<J>Y</J>
<J>Z</J>
...
</R>
E vorrei essere in grado di estrarre sia i I
valori come singola stringa che i J
valori come singola stringa senza dover utilizzare uno script ingombrante per ciascuno.