XML è un disastro
Quando aggiungi la stringa concatenata, perdi l '"elemento path".
Ad esempio se lo fai:
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('');
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('type');
Ottieni questo indietro:
<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>
Il nome o l'alias della colonna funge da elemento del percorso.
Alcuni altri esempi che potrebbero aiutare
utilizzando RAW, ELEMENTS
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;
Nel primo esempio, ottieni il nome dell'elemento "riga" generico, ma nel secondo ottieni la riga / tipo.
Quando si utilizza RAW, TYPE
:
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;
La prima query restituisce XML valido-ish, la seconda genera un errore perché l'elemento path non ha un identificatore.
Utilizzando AUTO
, l'alias della tabella e il nome della colonna si trasformano nel percorso:
SELECT type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
SELECT type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Ma senza un alias, si ottiene un errore simile:
SELECT type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Ne farei un esempio, FOR XML EXPLICIT
ma per me sarebbe irresponsabile iniziare a bere proprio ora.