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 AUTO
wird 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 EXPLICIT
aber es wäre unverantwortlich für mich, sofort mit dem Trinken zu beginnen.