Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Análise XML - Caractere XML ilegal (ao executar o procedimento armazenado, a execução de consultas de procedimento não resulta em erros)


Adivinhação pura:
  • O arquivo é utf-8 codificado (ou qualquer outra codificação, o SQL-Server 2008 não pode ler nativamente).
    • Você deve saber que o SQL-Server é bastante limitado com codificações de arquivos. CHAR (ou VARCHAR ) é extended ASCII 1-byte encoding e NCHAR (ou NVARCHAR ) é UCS-2 2-byte encoding (que é quase idêntico ao UTF-16 ).
    • Com o SQL-Server 2016 (e SP2 para v2014), algum suporte adicional foi introduzido, especialmente para utf-8 .
    • Tente abrir seu XML com um editor apropriado (por exemplo, notepad++) e tente descobrir a codificação do arquivo. Tente salvá-lo como "unicode / UCS-2 / utf-16" e tente novamente a importação.
    • Tente usar sua importação com CLOB em vez de BLOB . Lendo o arquivo como binário LargeObject levará os bytes um após o outro. O SQL-Server tentará ler esses bytes como string com tamanho fixo por caractere. Um personagem O LOB pode funcionar em circunstâncias especiais.
    • Verifique os dois primeiros bytes para um BOM (marca de ordem de bytes)
  • Há alguma sujeira dentro do seu XML
    • Abra o arquivo com um editor HEX e tente encontrar códigos estranhos
  • Seu código processa o conteúdo do arquivo em uma instrução criada dinamicamente.
    • Nesses casos, às vezes você encontra truncamento ou aspas que quebram a string
  • Dica geral:
    • Se você importa dados e espera problemas, é altamente recomendável usar uma abordagem em duas etapas
    • Leia seu arquivo em uma tabela de preparo tolerante (com NVARCHAR(MAX) ou mesmo VARBIANRY(MAX) colunas de destino) e tente continuar com isso.
    • Pode ser necessário usar outra ferramenta para alterar seu arquivo antes da importação.