sql >> Base de Datos >  >> RDS >> Sqlserver

Análisis XML:carácter XML ilegal (al ejecutar un procedimiento almacenado, la ejecución de consultas de procedimiento no produce errores)

Puras suposiciones:

  • El archivo es utf-8 codificado (o cualquier otra codificación, SQL-Server 2008 no puede leer de forma nativa).
    • Debe saber que SQL-Server está bastante limitado con las codificaciones de archivos. CHAR (o VARCHAR ) es extended ASCII 1-byte encoding y NCHAR (o NVARCHAR ) es UCS-2 2-byte encoding (que es casi idéntico a UTF-16 ).
    • Con SQL-Server 2016 (y SP2 para v2014) se introdujo más soporte, especialmente para utf-8 .
    • Intente abrir su XML con un editor adecuado (p. ej., notepad++) e intente averiguar la codificación del archivo. Intente guardar esto como "unicode/UCS-2/utf-16" y vuelva a intentar la importación.
    • Intenta usar tu importación con CLOB en lugar de BLOB . Leyendo el archivo como binario LargeObject tomará los bytes uno tras otro. SQL-Server intentará leer estos bytes como una cadena con un tamaño fijo por carácter. Un personaje LOB podría funcionar en circunstancias especiales.
    • Verifique los primeros dos bytes para un BOM (marca de orden de bytes)
  • Hay algo de suciedad dentro de su XML
    • Abra el archivo con un editor HEX e intente encontrar códigos extraños
  • Su código procesa el contenido del archivo dentro de una declaración creada dinámicamente.
    • En tales casos, a veces se encuentra con comillas truncadas o que rompen cadenas
  • Sugerencia general:
    • Si importa datos y espera problemas, se recomienda utilizar un enfoque de 2 pasos
    • Lea su archivo en una tabla de preparación tolerante (con NVARCHAR(MAX) o incluso VARBIANRY(MAX) columnas de destino) e intente continuar con esto.
    • Puede ser necesario usar otra herramienta para cambiar su archivo antes de la importación.