Estou criando um pacote no qual exportarei dados de um banco de dados para um arquivo excel vazio. Quando adicionei apenas os componentes de origem e destino e executei o pacote, recebi um erro de conversão informando que a coluna Saída e a coluna "A" não podem ser convertidas entre os tipos de dados de seqüência de caracteres unicode e não-unicode.
Para corrigir isso, adicionei um componente de conversão de dados e converti todas as colunas em
"Cadeia Unicode [DT_WSTR]"
e eu não recebi mais o erro. O único problema é que eu tinha cerca de 50 colunas onde precisei 1 por 1 e selecione "Unicode String [DT_WSTR]" na lista suspensa. Eu tive que ir para o componente de destino e mapear as colunas recém-convertidas para o meu arquivo do Excel.
Minha pergunta é: se alguém já se deparou com isso, existe uma maneira melhor e mais eficiente de evitar ter que fazer todas as conversões manuais de tipo de dados? Ter que converter e mapear todas as colunas uma por uma não parece prático, especialmente se você tiver um grande número de linhas.
Entendo que os arquivos do Excel não são a melhor maneira de importar e exportar dados, mas é o que é necessário nesse caso específico.
Eu poderia procurar uma maneira de exportar para um arquivo de texto simples e tentar converter para o Excel como um último passo no pacote. Espero que isso não acione o mesmo erro de conversão unicode / nonunicode.
fonte
Respostas:
Como alternativa ao RDC, eu apenas pularia a conversão dos tipos de dados no SSIS e os converteria explicitamente como nvarchar na minha consulta de origem.
Uso
Na sua consulta de origem (e você está usando uma consulta de origem e não simplesmente selecionando a tabela na lista suspensa), expanda explicitamente as coisas para um comprimento apropriado de n (var) char.
Ao invés de
use uma consulta como
Os alunos astutos da AdventureWorks reconhecerão que os dados já eram do
n(var)char
tipo, mas isso foi apenas para demonstrar o conceito.Benefícios
Data Conversion Component
no SSISfonte
CONVERT
deve ser mais fácil para colar 50 vezes do queCAST
, uma vez que os argumentos estão na frenteNativamente, não há como fazer isso. Mas você pode fazer o download - Substituindo o componente de conversão de dados para SSIS do Codeplex e fazer isso de uma só vez.
Mais informações podem ser encontradas aqui .
fonte
Se você precisar alterar apenas de "Cadeia de caracteres Unicode (DT_WSTR)" para "Cadeia de caracteres (DT_STR)" ou vice-versa, faça o seguinte:
Procure a sequência
DTS:DataType
se for seguida por = "130", a coluna é definida como DT_WSTR (unicode).Se for seguido por = "129", a coluna é definida como DT_STR (não unicode), use a pesquisa e substitua com cuidado (você fez uma cópia antes, não fez?)
Salve o arquivo e talvez seja isso.
fonte