Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

XML-Parsing – Unzulässiges XML-Zeichen (beim Ausführen einer gespeicherten Prozedur führt das Ausführen von Prozedurabfragen zu keinen Fehlern)

Reine Vermutung:

  • Die Datei ist utf-8 codiert (oder jede andere Codierung, SQL-Server 2008 kann nicht nativ lesen).
    • Sie müssen wissen, dass SQL-Server mit Dateikodierungen ziemlich eingeschränkt ist. CHAR (oder VARCHAR ) ist eine extended ASCII 1-byte encoding und NCHAR (oder NVARCHAR ) ist UCS-2 2-byte encoding (was fast identisch mit UTF-16 ist ).
    • Mit SQL-Server 2016 (und SP2 für v2014) wurde einige weitere Unterstützung eingeführt, insbesondere für utf-8 .
    • Versuchen Sie, Ihr XML mit einem geeigneten Editor (z. B. Notepad++) zu öffnen und versuchen Sie, die Kodierung der Datei herauszufinden. Versuchen Sie, dies als "unicode / UCS-2 / utf-16" zu speichern, und versuchen Sie den Import erneut.
    • Versuchen Sie, Ihren Import mit CLOB zu verwenden statt BLOB . Lesen der Datei als binär LargeObject übernimmt die Bytes nacheinander. Der SQL-Server wird versuchen, diese Bytes als String mit fester Größe pro Zeichen zu lesen. Ein Charakter LOB kann unter besonderen Umständen funktionieren.
    • Überprüfen Sie die ersten beiden Bytes auf eine BOM (Byte-Order-Marke)
  • Es gibt etwas Schmutz innerhalb Ihres XML
    • Öffnen Sie die Datei mit einem HEX-Editor und versuchen Sie, seltsame Codes zu finden
  • Ihr Code verarbeitet den Inhalt der Datei innerhalb einer dynamisch erstellten Anweisung.
    • In solchen Fällen stoßen Sie manchmal auf abgeschnittene oder Zeichenfolgen brechende Anführungszeichen
  • Allgemeiner Hinweis:
    • Wenn Sie Daten importieren und Probleme erwarten, wird dringend empfohlen, einen 2-Stufen-Ansatz zu verwenden
    • Lesen Sie Ihre Datei in eine tolerante Staging-Tabelle ein (mit NVARCHAR(MAX) oder sogar VARBIANRY(MAX) Zielspalten) und versuchen Sie, damit fortzufahren.
    • Möglicherweise müssen Sie ein anderes Tool verwenden, um Ihre Datei vor dem Importieren zu ändern.