XML gila
Saat Anda menambahkan string yang digabungkan, Anda kehilangan "elemen path".
Sebagai contoh jika Anda melakukan ini:
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');
Anda mendapatkan ini kembali:
<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>
Nama kolom atau alias bertindak sebagai elemen jalur.
Beberapa contoh lain yang mungkin bisa membantu
Menggunakan 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;
Pada contoh pertama, Anda mendapatkan nama elemen "baris" yang umum, tetapi pada yang kedua Anda mendapatkan baris / jenis.
Saat menggunakan 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;
Kueri pertama menghasilkan XML yang valid-ish, yang kedua melempar kesalahan karena elemen jalan tidak memiliki pengidentifikasi.
Menggunakan AUTO
, alias tabel dan nama kolom berubah menjadi jalur:
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;
Tetapi tanpa alias, Anda mendapatkan kesalahan serupa:
SELECT type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Saya akan membuat contoh dengan FOR XML EXPLICIT
tetapi tidak bertanggung jawab bagi saya untuk mulai minum sekarang.