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

Analisi XML - Carattere XML non valido (durante l'esecuzione di una procedura memorizzata, l'esecuzione di query di procedura non genera errori)

Pura supposizione:

  • Il file è utf-8 codificato (o qualsiasi altra codifica, SQL-Server 2008 non può leggere in modo nativo).
    • Devi sapere che SQL-Server è piuttosto limitato con le codifiche dei file. CHAR (o VARCHAR ) è extended ASCII 1-byte encoding e NCHAR (o NVARCHAR ) è UCS-2 2-byte encoding (che è quasi identico a UTF-16 ).
    • Con SQL-Server 2016 (e SP2 per v2014) è stato introdotto un ulteriore supporto, in particolare per utf-8 .
    • Prova ad aprire il tuo XML con un editor appropriato (es. notepad++) e prova a scoprire la codifica del file. Prova a salvarlo come "unicode / UCS-2 / utf-16" e riprova a importare.
    • Prova a utilizzare l'importazione con CLOB invece di BLOB . Lettura del file come binario LargeObject prenderà i byte uno dopo l'altro. SQL-Server proverà a leggere questi byte come stringa con dimensione fissa per carattere. Un personaggio LOB potrebbe funzionare in circostanze speciali.
    • Controlla i primi due byte per una BOM (segno dell'ordine dei byte)
  • C'è un po' di sporcizia all'interno del tuo XML
    • Apri il file con un editor HEX e prova a trovare codici strani
  • Il tuo codice elabora il contenuto del file all'interno di un'istruzione creata dinamicamente.
    • In questi casi a volte ti imbatti in virgolette troncate o che interrompono le stringhe
  • Suggerimento generale:
    • Se importi dati e prevedi problemi, ti consigliamo vivamente di utilizzare un approccio in due passaggi
    • Leggi il tuo file in una tabella di staging tollerante (con NVARCHAR(MAX) o anche VARBIANRY(MAX) colonne target) e prova a continuare con questo.
    • Potrebbe essere necessario utilizzare un altro strumento per modificare il file prima dell'importazione.