sql >> データベース >  >> RDS >> Sqlserver

XML解析-無効なXML文字(ストアドプロシージャを実行するときに、プロシージャクエリを実行してもエラーは発生しません)

    純粋な推測:

    • ファイルはutf-8です エンコードされた(または他のエンコード、SQL-Server 2008はネイティブに読み取ることができません)。
      • SQL-Serverはファイルエンコーディングにかなり制限されていることを知っておく必要があります。 CHAR (またはVARCHAR )はextended ASCII 1-byte encodingです およびNCHAR (またはNVARCHAR )はUCS-2 2-byte encodingです (これはUTF-16とほぼ同じです 。
      • SQL-Server 2016(およびv2014のSP2)では、特にutf-8について、さらにいくつかのサポートが導入されました。 。
      • 適切なエディタ(notepad ++など)でXMLを開いて、ファイルのエンコーディングを調べてみてください。これを「unicode/UCS-2 / utf-16」として保存し、インポートを再試行してください。
      • インポートをCLOBで使用してみてください BLOBの代わりに 。ファイルをバイナリとして読み取る LargeObjectは、バイトを次々に取得します。 SQL-Serverは、これらのバイトを1文字あたりのサイズが固定された文字列として読み取ろうとします。 キャラクター LOBは特別な状況で機能する可能性があります。
      • 最初の2バイトでBOMを確認します (バイト順マーク)
    • いくつかの汚れがあります XML内
      • HEXエディターでファイルを開き、奇妙なコードを見つけてみてください
    • コードは、動的に作成されたステートメント内でファイルのコンテンツを処理します。
      • このような場合、切り捨てまたは文字列を壊す引用符に遭遇することがあります
    • 一般的なヒント:
      • データをインポートして問題が発生することが予想される場合は、2ステップアプローチを使用することを強くお勧めします。
      • ファイルを許容ステージングテーブルに読み込みます (NVARCHAR(MAX)を使用 またはVARBIANRY(MAX) ターゲット列)、これを続行してみてください。
      • インポートする前に、別のツールを使用してファイルを変更する必要がある場合があります。



    1. Dockercomposeを使用してmysqldbを作成するにはどうすればよいですか?

    2. チェック制約は別のテーブルに関連付けることができますか?

    3. テーブルのスキーマを取得する

    4. nullの数が少ないものからnullがないものまでの列を使用して行を並べ替えます