Ich habe eine große Frage (wenn nötig, werde ich sie hier posten) und bekomme diese Fehlermeldung:
Meldung 6841, Ebene 16, Status 1, Zeile 1
FOR XML konnte die Daten für den Knoten 'NoName' nicht serialisieren, da er ein Zeichen (0x0000) enthält, das in XML nicht zulässig ist. Um diese Daten mit FOR XML abzurufen, konvertieren Sie sie in einen Binär-, Varbinär- oder Image-Datentyp und verwenden Sie die BINARY BASE64-Direktive.
Der einzige Teil, den ich benutze, FOR XML
ist hier:
WHERE
(CodFuncionario = Results.CodFuncionario)
FOR XML PATH(''), TYPE).value('(./text())[1]',
'VARCHAR(MAX)'), 1, 2, '') AS [Experiencia]
Aber was ist node noname
? und wie kann ich diesen Wert suchen:(0x0000)
Dies ist eine der Unterabfragen (der einzige Teil, den ich für XML habe):
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...
quelle
Ich habe dies mit ASCII-Zeichen 0-255 getestet und festgestellt, dass Sie diesen Fehler für Zeichen erhalten:
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
.Eine Problemumgehung ist das Entfernen
, TYPE
aus Ihrer XML-Anweisung .Eine andere Möglichkeit besteht darin, diese Zeichen in der select-Anweisung zu entfernen:
Mit diesen Anweisungen zum Ersetzen können Sie auch eine Funktion erstellen.
quelle
Optimieren der Antwort von @jumxozizi mithilfe von translate () (SQL Server 2017 ++). Der folgende Code ersetzt diese Zeichen durch Punkte.
Um sie stattdessen zu entfernen, könnte man sie zuerst in char (0) übersetzen und diese dann mit einem replace () umschließen.
Aus der Idee: /programming//a/55906638/538763
quelle