O SSIS mantém a força alterando a string de origem do Excel para flutuar

9

Há uma coluna no Excel que deveria ser texto, mas o SSIS vê o texto numérico e o torna automaticamente flutuador de dupla precisão [DT_R8].

Posso alterá-lo manualmente nas colunas External e Output do ramo Output, mas o Error Output simplesmente se recusa a permitir que eu altere a respectiva coluna.

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

Eu tentei modificar o pacote xml. Eu tentei o IMEX=1e, typeguessrow=0mas nada disso resolveu o meu problema. Isso tem alguma correção? Também existem artigos sugerindo que você modifique seu registro para que o Excel leia mais do que as 8 linhas padrão antes de adivinhar o tipo de dados. Eu não quero seguir esse caminho porque, mesmo que funcionasse, teria que modificar o registro na máquina em que planejo executar o pacote.

O campo excel a ser importado para o campo nvarchar SQL lê, por exemplo

295.3
296.33

mas eles estão sendo gravados na tabela SQL como

295.30000000000001
296.32999999999998

Eu coloquei no visualizador de dados e os campos mostram

295.3
296.33

todo o caminho através da execução, que está correta, mas acho que quando ele atinge a fonte de destino OLE DB, de alguma forma o converte no

295.30000000000001
296.32999999999998

o que está errado.

Também tenho valores como V321.1 e V213.34, por exemplo, que definitivamente não são números inteiros e precisam ser armazenados como varchar.

Juan Velez
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Paul White 9

Respostas:

2

É possível obter o arquivo como um arquivo .csv que pode ser importado como um arquivo de texto e não terá esse problema? Geralmente, retrocesso todos os arquivos do Excel e solicito outro formato, porque o SSIS e o Excel não funcionam bem em muitos níveis.

HLGEM
fonte
11
Estou esperando que a alteração para o arquivo .csv ou txt esteja no futuro próximo. tornará as coisas muito mais fáceis.
Juan Velez
2

Parece que não há como corrigir esse problema. O Excel examina as primeiras linhas de dados da coluna e sempre força o tipo de dados para FLOAT, não importa o quê. Foi-me dada uma solução de criar um modelo com alguns caracteres varchar nas primeiras linhas (8 ou mais), para que o EXCEL escolha isso como o tipo de dados e depois importe meus dados. Uma coisa que ajudou é que, como estou usando o Source Safe, sou capaz de "Fazer check-in" de um arquivo para que ele torne meu arquivo de pacote "Somente leitura" para que o Visual Studio não possa alterar meus tipos de dados predefinidos.

Juan Velez
fonte
1

Etapa 1: adicione IMEX=1; MAXROWSTOSCAN=0a cadeia de conexões (por exemplo Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0").

Etapa 2: feche a solução. Abra o pacote SSIS no editor de texto, encontre as colunas que continuavam voltando ao tipo de dados predefinido. Atualize-o manualmente no arquivo XML para o formato desejado.

Etapa 3: abra o pacote no SQL Server Data Tool e execute; agora você deve conseguir carregar os dados do arquivo.

user1968485
fonte
Desculpe, mas o tipo de dados de origem não está no pacote. Apenas os tipos de coluna de destino. Isso derrota o objetivo novamente, já que a conversão ainda ocorre no lado do driver Microsoft.Ace (ou qualquer outro driver escolhido) e a perda de dados já aconteceu no momento em que entra no SSIS e na tabela de destino.
Reversed Engineer