sql >> Databasteknik >  >> RDS >> Sqlserver

XML Parsing - Illegal XML Character (när man kör lagrad procedur resulterar körning av procedurfrågor inte i några fel)

Ren gissning:

  • Filen är utf-8 kodad (eller någon annan kodning, SQL-Server 2008 kan inte läsas inbyggt).
    • Du måste veta att SQL-Server är ganska begränsad med filkodningar. CHAR (eller VARCHAR ) är extended ASCII 1-byte encoding och NCHAR (eller NVARCHAR ) är UCS-2 2-byte encoding (vilket är nästan identiskt med UTF-16 ).
    • Med SQL-Server 2016 (och SP2 för v2014) introducerades ytterligare stöd, särskilt för utf-8 .
    • Försök att öppna din XML med en lämplig editor (t.ex. anteckningar++) och försök ta reda på filens kodning. Försök att spara detta som "unicode / UCS-2 / utf-16" och försök importera igen.
    • Försök att använda din import med CLOB istället för BLOB . Läser filen som binär LargeObject tar byten en efter en. SQL-Server kommer att försöka läsa dessa byte som sträng med fast storlek per tecken. En karaktär LOB kan fungera under speciella omständigheter.
    • Kontrollera de två första byten för en BOM (byteordningsmärke)
  • Det finns en del smuts i din XML
    • Öppna filen med en HEX-editor och försök hitta konstiga koder
  • Din kod bearbetar filens innehåll i en dynamiskt skapad sats.
    • I sådana fall stöter du ibland på trunkering eller strängbrytande citattecken
  • Allmänt tips:
    • Om du importerar data och du förväntar dig problem rekommenderas det starkt att du använder en tvåstegsmetod
    • Läs din fil i en tolerant mellanställningstabell (med NVARCHAR(MAX) eller till och med VARBIANRY(MAX) målkolumner) och försök fortsätta med detta.
    • Det kan vara nödvändigt att använda ett annat verktyg för att ändra din fil innan importen.



  1. kunde inte ställa in ett fältvärde med reflektionssättare

  2. Proaktiva SQL Server Health Checks, Del 4:ERRORLOG

  3. Finns det något sätt att inaktivera uppdateringar/borttagningar men ändå tillåta triggers att utföra dem?

  4. MySQL group_concat med select inuti select