sql >> Database teknologi >  >> RDS >> Sqlserver

XML-parsing - Ulovligt XML-tegn (når der udføres lagret procedure, resulterer kørsel af procedureforespørgsler i ingen fejl)

Ren gæt:

  • Filen er utf-8 kodet (eller enhver anden kodning, SQL-Server 2008 kan ikke læse indbygget).
    • Du skal vide, at SQL-Server er ret begrænset med filkodninger. CHAR (eller VARCHAR ) er extended ASCII 1-byte encoding og NCHAR (eller NVARCHAR ) er UCS-2 2-byte encoding (hvilket er næsten identisk med UTF-16 ).
    • Med SQL-Server 2016 (og SP2 til v2014) blev der introduceret noget yderligere support, især for utf-8 .
    • Prøv at åbne din XML med en passende editor (f.eks. notesblok++), og prøv at finde ud af filens kodning. Prøv at gemme dette som "unicode / UCS-2 / utf-16", og prøv at importere igen.
    • Prøv at bruge din import med CLOB i stedet for BLOB . Læser filen som binær LargeObject vil tage bytes én efter den næste. SQL-Server vil forsøge at læse disse bytes som strenge med fast størrelse pr. tegn. En karakter LOB kan fungere under særlige omstændigheder.
    • Tjek de første to bytes for en BOM (byteordensmærke)
  • Der er noget snavs i din XML
    • Åbn filen med en HEX-editor og prøv at finde mærkelige koder
  • Din kode behandler filens indhold i en dynamisk oprettet sætning.
    • I sådanne tilfælde støder du nogle gange ind i trunkering eller strengbrydende anførselstegn
  • Generelt tip:
    • Hvis du importerer data, og du forventer problemer, anbefales det stærkt at bruge en 2-trins tilgang
    • Læs din fil ind i en tolerant iscenesættelsestabel (med NVARCHAR(MAX) eller endda VARBIANRY(MAX) målkolonner) og prøv at fortsætte med dette.
    • Det kan være nødvendigt at bruge et andet værktøj til at ændre din fil før importen.



  1. MySQL Workbench - Sådan synkroniseres EER-diagrammet

  2. Er der en LISTAGG WITHIN GROUP-ækvivalent i SQLAlchemy?

  3. Forskellen mellem inline og out-of-line begrænsninger

  4. Langsomme Postgres 9.3-forespørgsler