O valor não pôde ser convertido devido a uma potencial perda de dados [fechada]

12

Deixe-me começar esclarecendo que esta não é uma pergunta duplicada , nem uma potencial duplicada para esse assunto. Eu tentei implementar todas as respostas para todas as variantes que já existem desse problema no StackOverflow e no DBA Stack Exchange, sem sorte.

Eu tenho lutado com esse problema nos últimos dois dias (trabalhando nele por aproximadamente 7 horas por dia) e, mesmo depois de pesquisar no Google, parece que ninguém mais está tendo a mesma variante exata do meu problema.

O que estou tentando fazer?

No SSIS, estou tentando ler de um arquivo CSV e inserir as linhas dele em um banco de dados OLE DB. Para isso, fiz a configuração mais simples de sempre, vista abaixo.

  1. Flat File Source - lê as linhas CSV.
  2. Derived Column - atualmente não faz nada (está lá apenas para experimentar).
  3. Data Conversion - atualmente não faz nada (está lá apenas para experimentar).
  4. OLE DB Destination - armazena as linhas no banco de dados.

Quando tento executá-lo, ele para de ser executado no meu Destino OLE DB com a seguinte mensagem de erro.

Houve um erro com a coluna de entrada "Valor" (187) na entrada "Entrada de destino do OLE DB" (51). O status da coluna retornado foi: "O valor não pôde ser convertido devido a uma potencial perda de dados".

A coluna que falha ( Amount) atualmente é do tipo DT_STR. Parece ser do tipo que eu tenho mais fé agora.

O que eu tentei?

  • Eu tentei usar a Flat File Connectionfunção "Suggest Types" do na coluna que está falhando. Isso fez recomendar o Single byte signed inttipo de dados.
    • Pára na minha fonte de arquivo simples .
    • O erro está com falha na conversão de dados. A conversão de dados para a coluna "Valor" retornou o valor de status 2 e o texto de status "O valor não pôde ser convertido devido a uma possível perda de dados.".
  • Eu tentei usar o Derived Columnpara converter a coluna em um DT_I4.
    • Pára na minha coluna derivada .
    • O erro está com falha na conversão de dados. A conversão de dados para a coluna "Valor" retornou o valor de status 2 e o texto de status "O valor não pôde ser convertido devido a uma possível perda de dados.".
  • Eu tentei usar o Data Conversionpara converter o valor da minha coluna para a DT_I4.
    • Pára na minha Data Conversion.
    • O erro está com falha na conversão de dados. A conversão de dados para a coluna "Valor" retornou o valor de status 2 e o texto de status "O valor não pôde ser convertido devido a uma possível perda de dados.".
  • Tentei alterar o tamanho do meu DT_STRvalor na origem e no destino.
    • Pára na origem ou no destino, dependendo das configurações.
  • Tentei conectar usando um conector de origem do Excel, com e sem o IMEX=1adicionado à seqüência de conexão. Sem sorte

Meu senso de programação me diz que estou ferrado. Eu nunca nunca encontrou um problema tão grande para uma coisa tão simples.

E por que não posso simplesmente ignorar a "potencial" perda de dados? É realmente frustrante para dizer o mínimo.

Meu sistema

É uma máquina Windows Server 2008 R2 com o SQL Server 2008 instalado. A máquina em si é totalmente atualizada pelo Windows Update.

Mathias Lykkegaard Lorenzen
fonte
Parece que eu tive esse problema com um valor (apesar de extrair do Access) e tive que usar uma página de código específica ao converter a coluna. Não tenho mais acesso ao pacote SSIS para verificar o que fiz.
Qual é o tipo de dados da coluna na qual você está tentando inserir Amount?
Jon of All Trades
2
Abra o Gerenciador de conexões de arquivos simples para o CSV. Vá para a guia Avançado e selecione a Amountcoluna. Faça uma captura de tela e atualize sua pergunta com esta imagem.
billinkc
Já teve a oportunidade de consultar o Connection Manager?
billinkc
1
Não acredito que você esteja ferrado, mas sem ver a definição do seu Connection Manager, é impossível dizer.
billinkc

Respostas:

3

Eu me deparei com isso algumas vezes e o problema foi uma incompatibilidade de tipos de dados nos parâmetros de exportação / importação. A primeira coisa a fazer é verificar esses parâmetros clicando com o botão direito na origem ou destino, selecionando Editor Avançado. Vá para Propriedades de entrada e saída e verifique o tipo de dados para essa coluna para todos os itens - Externo, Saída e Entrada. Eu geralmente vi uma variação aqui, muitas vezes uma é Unicode (WSTR) e a outra I4 ou DSTR.

Mike
fonte
7

Ignorando o erro

Antes de tudo, você deve poder ignorar o truncamento de cadeias de caracteres acessando a Origem do arquivo simples, a Saída de erros e alterando "Componente de falha" em "Truncamento" para "Ignorar erro".

Melhor solução

O problema real pode ser que o comprimento da cadeia de caracteres no pipeline do SSIS ainda esteja errado porque foi inicializado em algum momento anterior.

Você pode determinar se esse é o caso clicando duas vezes na seta verde da sua fonte de arquivo simples (ou após a coluna Derivada / conversão de dados) e escolhendo "MetaDados". Lá você pode ver o comprimento do campo dentro do pipeline.

Se tivermos visto frequentemente que os metadados não correspondem mais ao componente de origem, principalmente se você criar a Origem do arquivo simples E sua conexão correspondente por meio do Assistente.

Minha sugestão seria excluir a conexão e a fonte de arquivo simples e recriá-los, pois não encontrei uma maneira de sincronizar novamente os metadados do pipeline com os componentes de origem.

Oliver Rahner
fonte
2
Isso não se enquadra em "truncamento". Eu já tentei.
Mathias Lykkegaard Lorenzen