Eu estava tendo problemas ao usar o Assistente de Importação no SQL Server 2008 R2 para importar tabelas do PostgreSQL. Eu tinha o driver ODBC PostgreSQL instalado, então para a Fonte de Dados no Assistente de Importação eu escolhi ".Net Framework Data Provider for Odbc" e forneci o nome DSN para meu banco de dados PostgreSQL. O wizard achou as tabelas ok, mas quando fui realizar a importação recebi o erro
As informações da coluna para os dados de origem e destino não puderam ser recuperadas.
“Faturamento” -> [dbo].[Faturamento]:
– Não é possível encontrar a coluna -1.
Encontrei a solução na postagem do blog da Microsoft aqui. Aparentemente, o problema é que vários drivers ODBC usam nomes de atributos diferentes ao relatar metadados de coluna. Para fazer a importação funcionar eu tive que editar o arquivo "ProviderDescriptors.xml", que estava localizado em
C:\Arquivos de Programas\Microsoft SQL Server\100\DTS\ProviderDescriptors\ProviderDescriptors.xml
No ...
<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
... elemento eu tive que mudar os atributos de ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "COLUMN_SIZE"
NumericPrecisionColumnName = "COLUMN_SIZE"
NumericScaleColumnName = "DECIMAL_DIGITS"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
... para ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
Ou seja, tive que ajustar o
MaximumLengthColumnName
, NumericPrecisionColumnName
e NumericScaleColumnName
valores de atributo para "LENGTH"
, "PRECISION"
, e "SCALE"
, respectivamente. Depois que essa alteração foi feita, a importação do PostgreSQL para o SQL Server foi executada com êxito.