XML ist verrückt
Wenn Sie die verkettete Zeichenfolge hinzufügen, verlieren Sie das "Pfadelement".
Zum Beispiel, wenn Sie dies tun:
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');
Du bekommst das zurück:
<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>
Der Spaltenname oder Alias fungiert als Pfadelement.
Einige andere Beispiele, die helfen könnten
Verwenden von 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;
Im ersten Beispiel erhalten Sie den generischen Elementnamen "row", im zweiten Beispiel erhalten Sie row / type.
Bei Verwendung von 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;
Die erste Abfrage gibt gültiges XML zurück, die zweite gibt einen Fehler aus, da dem Pfadelement eine Kennung fehlt.
Mit AUTOwird der Tabellenalias und der Spaltenname in den Pfad umgewandelt:
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;
Ohne Alias wird jedoch ein ähnlicher Fehler angezeigt:
SELECT type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Ich würde ein Beispiel dafür finden, FOR XML EXPLICITaber es wäre unverantwortlich für mich, sofort mit dem Trinken zu beginnen.