Estou tentando usar o Assistente de importação e exportação de dados para importar o conteúdo de um arquivo CSV para uma tabela no MSSQL.
Não tenho problemas se importar todas as colunas como strings, no entanto, preciso que uma coluna seja flutuante. (No CSV, a coluna 4 é um valor monetário com duas casas decimais, por exemplo, US$ 200,30).
Sempre que defino o valor da coluna 4 para float, recebo o seguinte erro durante a importação:
Erro 0xc02020a1: Tarefa de Fluxo de Dados 1: Falha na conversão de dados. A conversão de dados para a coluna "Coluna 4" 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". (Assistente de importação e exportação do SQL Server)
Aqui está um exemplo dos dados que estou importando:
+----+------+----------+-----------+--------+
| 1 | 2014 | December | 400089323 | 8.03 |
| 2 | 2014 | December | 400319749 | 45.65 |
| 3 | 2014 | December | 400377067 | 38 |
| 4 | 2014 | December | 400524693 | 0 |
| 5 | 2014 | December | 400536070 | 125.31 |
| 6 | 2014 | December | 400663546 | 266.95 |
| 7 | 2014 | December | 400705907 | 218 |
| 8 | 2014 | December | 400763025 | 244.39 |
| 9 | 2014 | December | 400782510 | 12.89 |
| 10 | 2014 | December | 400794040 | 61.04 |
+----+------+----------+-----------+--------+
Este é o tipo de dados da coluna 4:
O restante das colunas são "numéricos [DT_NUMERIC]", exceto a coluna 2, que é "string [DT_STR]".
Eu tentei tipos de dados diferentes para a coluna 4, como numérico e moeda. Isso não funcionou.
FYI: Estou usando o SQL Server 2012.
Importe-o como uma string e faça uma coluna derivada para convertê-lo em float. Quaisquer que sejam as linhas que falham na conversão, serão redirecionadas para a saída do erro e você poderá pelo menos ver qual é o problema.
As conexões de arquivo simples falham completamente quando encontram problemas. Geralmente, é mais produtivo trazê-los da forma mais livre possível e adicionar estrutura dentro do SSIS.
Você quase certamente não quer usar carros alegóricos de qualquer maneira. Use 'numeric' quando estiverem dentro do pacote.
Só quero compartilhar um arquivo da Microsoft que me ajudou a permitir uma importação mais fácil. Acredito que usar esse método contornará alguns dos erros de conversão que podem ser difíceis de localizar e parecem não ser atualizados usando o ASSISTENTE.
Odeio usar o StackExchange como um diretor para outro tutorial, mas em geral eu diria que a documentação da Microsoft está relativamente atualizada e pode ser útil.
https://learn.microsoft.com/en-us/sql/integration-services/import-export-data/get-started-with-this-simple-example-of-the-import-and-export-wizard? view=sql-server-ver16
A dica específica que me ajudou foi usar o formato Excel e depois o .Net Framework Data Provider para SqlServer. Isso foi apropriado, pois estou trabalhando apenas com os dados em minha máquina local. Em seguida, altere o InitialCatalog para o local do banco de dados desejado para a importação.