Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Analyse XML - Caractère XML illégal (lors de l'exécution d'une procédure stockée, l'exécution de requêtes de procédure ne génère aucune erreur)

Devinettes :

  • Le fichier est utf-8 encodé (ou tout autre encodage, SQL-Server 2008 ne peut pas lire nativement).
    • Vous devez savoir que SQL-Server est plutôt limité avec les encodages de fichiers. CHAR (ou VARCHAR ) est un extended ASCII 1-byte encoding et NCHAR (ou NVARCHAR ) est un UCS-2 2-byte encoding (qui est presque identique à UTF-16 ).
    • Avec SQL-Server 2016 (et SP2 pour la version 2014), une prise en charge supplémentaire a été introduite, en particulier pour utf-8 .
    • Essayez d'ouvrir votre XML avec un éditeur approprié (par exemple, notepad++) et essayez de trouver l'encodage du fichier. Essayez de l'enregistrer sous "unicode / UCS-2 / utf-16" et réessayez l'importation.
    • Essayez d'utiliser votre importation avec CLOB au lieu de BLOB . Lecture du fichier en tant que binaire LargeObject prendra les octets les uns après les autres. SQL-Server essaiera de lire ces octets sous forme de chaîne avec une taille fixe par caractère. Un personnage LOB peut fonctionner dans des circonstances particulières.
    • Vérifiez les deux premiers octets pour une BOM (marque d'ordre d'octet)
  • Il y a de la saleté dans votre XML
    • Ouvrez le fichier avec un éditeur HEX et essayez de trouver des codes étranges
  • Votre code traite le contenu du fichier dans une instruction créée dynamiquement.
    • Dans de tels cas, vous rencontrez parfois des troncatures ou des guillemets avec rupture de chaîne
  • Conseil général :
    • Si vous importez des données et que vous vous attendez à des problèmes, il est fortement recommandé d'utiliser une approche en deux étapes
    • Lire votre fichier dans une table intermédiaire tolérante (avec NVARCHAR(MAX) ou encore VARBIANRY(MAX) colonnes cibles) et essayez de continuer.
    • Il peut être nécessaire d'utiliser un autre outil pour modifier votre fichier avant l'importation.