Saya punya pertanyaan besar (jika perlu saya akan posting di sini) dan saya mendapatkan kesalahan ini:
Msg 6841, Level 16, Negara 1, Baris 1
UNTUK XML tidak dapat membuat serialisasi data untuk simpul 'NoName' karena mengandung karakter (0x0000) yang tidak diizinkan dalam XML. Untuk mengambil data ini menggunakan UNTUK XML, mengonversinya menjadi tipe data biner, varbinary atau gambar dan menggunakan direktif BINARY BASE64.
Satu-satunya bagian yang saya gunakan FOR XML
ada di sini:
WHERE
(CodFuncionario = Results.CodFuncionario)
FOR XML PATH(''), TYPE).value('(./text())[1]',
'VARCHAR(MAX)'), 1, 2, '') AS [Experiencia]
Tapi apa itu node noname
? dan bagaimana saya bisa mencari nilai ini:(0x0000)
Ini adalah salah satu subqueries (satu-satunya bagian yang saya miliki UNTUK XML):
SELECT
[CodFuncionario],
STUFF
(
(
SELECT
' / ' +
CAST
(
[DescFuncao] + '-' +
[DescTempoExperiencia]
AS VARCHAR(MAX)
)...
FROM
[Linked_Server].db.dbo.tblFuncionarioExperiencia T0
INNER JOIN
[Linked_Server].db.dbo.tblFuncao T1 On T0.codFuncao = T1.CodFuncao
INNER JOIN
[Linked_Server].db.dbo.tblTempoExperiencia T2 ON T0.CodTempoExperiencia = T2.CodTempoExperiencia
WHERE
(CodFuncionario = Results.CodFuncionario)
FOR XML PATH(''), TYPE).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, '') AS [Experiencia]
FROM
[Linked_Server].db.dbo.tblFuncionarioExperiencia Results
GROUP BY
CodFuncionario) as T2
On T0.CodFuncionario = T2.CodFuncionario
Left Join...
sumber
Saya menguji dengan karakter ASCII 0-255 dan menemukan bahwa Anda mendapatkan error ini untuk karakter:
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000B, 0x000C, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
.Salah satu solusinya adalah menghapus
, TYPE
dari pernyataan XML Anda.Cara lain adalah menghapus karakter-karakter itu dalam pernyataan pilih:
Anda juga bisa membuat fungsi dengan pernyataan ganti ini.
sumber
Mengoptimalkan jawaban dari @jumxozizi dengan menggunakan translate () (SQL Server 2017 ++). Kode di bawah ini akan menggantikan karakter tersebut dengan titik.
Untuk menghapusnya, orang dapat menerjemahkan () pertama-tama menjadi char (0) dan kemudian membungkusnya dengan replace ().
Dari ide: /programming//a/55906638/538763
sumber