Tenho um arquivo de dados em formato txt e costumava carregá-lo com Bulk Insert no seguinte comando:
Bulk insert [table1]
FROM 'data.txt'
WITH
(
FIELDTERMINATOR ='|',
ROWTERMINATOR ='0x0a',
)
O código funciona bem. No entanto, enquanto tentava usar um arquivo de formato com a inserção em massa para carregar o arquivo, encontrei alguns problemas ao especificar o terminador de campo para a última linha.
Aqui está a especificação para a última linha no arquivo de formato:
21 SQLCHAR 0 20 "0x0a" 21 misc_costs SQL_Latin1_General_CP1_CI_AS
Com "0x0a" como terminador, recebo o seguinte erro:
Erro de conversão de dados de carregamento em massa (truncamento) para linha 2, coluna 1 (var1).
Com "\n", os dados podem ser carregados, mas "|" também é carregado na última coluna. Por exemplo, recebo "0,5|" em vez de "0,5".
"|\n","0x0a","|0x0a",'\r\n' retorna o mesmo erro que "|"
Erro de conversão de dados de carregamento em massa (truncamento) para linha 2, coluna 1 (var1).
Estou usando o sql-server 2016, windows 10 64 bits.
Alguém pode ajudar com isso? Agradeço antecipadamente por sua ajuda!
jasão
Depois de um dia inteiro lutando com o código Line Feed/Hex, finalmente descobri que meu problema era causado pela falta de colunas nos arquivos de formato. O conjunto de dados é novo para mim e pensei que tivesse 21 linhas, enquanto na verdade tem 22 linhas. É por isso que o sql server continuou carregando o último "|" do arquivo de dados.
Aqui está uma referência para outros interessados em carregar arquivos de dados do sistema UNIX com terminadores de linha diferentes do Windows, existem três métodos:
Antes de tentar esses métodos, use um bloco de notas para mostrar todos os caracteres de controle para confirmar os caracteres de controle usados pelos arquivos de texto.
Se nenhum desses métodos funcionar para você, você pode ter alguns problemas além do alimentador de linha/terminador de linha.