XML bonkers
Birleştirilmiş dizeyi eklediğinizde, "yol öğesini" kaybedersiniz.
Örneğin, bunu yaparsanız:
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');
Bunu geri alıyorsunuz:
<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>
Sütun adı veya diğer adı yol öğesi olarak işlev görür.
Yardımcı olabilecek diğer bazı örnekler
kullanma 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;
İlk örnekte, genel "satır" öğe adını alırsınız, ancak ikincisinde satır / tür alırsınız.
Kullanırken 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;
İlk sorgu geçerli-ish XML döndürür, ikincisi yol öğesinde bir tanımlayıcı bulunmadığından bir hata atar.
Kullanıldığında AUTO, tablo diğer adı ve sütun adı yola dönüşür:
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;
Ancak takma ad olmadan benzer bir hata alırsınız:
SELECT type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Bir örnek alırdım FOR XML EXPLICITama şimdi içmeye başlamak benim için sorumsuz olurdu.