sql >> Database >  >> RDS >> Sqlserver

XML-parsing - Illegaal XML-teken (bij het uitvoeren van een opgeslagen procedure levert het uitvoeren van procedurequery's geen fouten op)

Puur gissen:

  • Het bestand is utf-8 gecodeerd (of een andere codering, SQL-Server 2008 kan niet native lezen).
    • Je moet weten dat SQL-Server nogal beperkt is met bestandscoderingen. CHAR (of VARCHAR ) is extended ASCII 1-byte encoding en NCHAR (of NVARCHAR ) is UCS-2 2-byte encoding (wat bijna identiek is aan UTF-16 ).
    • Met SQL-Server 2016 (en SP2 voor v2014) werd wat meer ondersteuning geïntroduceerd, vooral voor utf-8 .
    • Probeer je XML te openen met een geschikte editor (bijvoorbeeld notepad++) en probeer de codering van het bestand te achterhalen. Probeer dit op te slaan als "unicode / UCS-2 / utf-16" en probeer de import opnieuw.
    • Probeer je import te gebruiken met CLOB in plaats van BLOB . Het bestand lezen als binair LargeObject neemt de bytes één voor één in beslag. SQL-Server zal proberen deze bytes te lezen als string met een vaste grootte per karakter. Een karakter LOB werkt mogelijk onder speciale omstandigheden.
    • Controleer de eerste twee bytes voor een BOM (byte-volgordemarkering)
  • Er is wat vuil binnen uw XML
    • Open het bestand met een HEX-editor en probeer vreemde codes te vinden
  • Uw code verwerkt de inhoud van het bestand in een dynamisch gemaakte instructie.
    • In dergelijke gevallen kom je soms truncatie- of tekenreeksbrekende aanhalingstekens tegen
  • Algemene hint:
    • Als u gegevens importeert en u problemen verwacht, wordt het ten zeerste aanbevolen om een ​​2-stappenaanpak te gebruiken
    • Lees uw bestand in een tolerante verzameltabel (met NVARCHAR(MAX) of zelfs VARBIANRY(MAX) doelkolommen) en probeer hiermee verder te gaan.
    • Het kan nodig zijn om een ​​ander hulpmiddel te gebruiken om uw bestand te wijzigen vóór het importeren.



  1. AM/PM werkt niet met tussen in sql

  2. Waarom zijn logische leesbewerkingen voor geaggregeerde vensterfuncties zo hoog?

  3. MySQL:BEPERKEN met een percentage van het aantal records?

  4. Identifier te lang in Oracle