Estaba teniendo problemas al usar el Asistente de importación en SQL Server 2008 R2 para importar tablas de PostgreSQL. Tenía instalado el controlador ODBC de PostgreSQL, así que para la Fuente de datos en el Asistente de importación, elegí "Proveedor de datos de .Net Framework para Odbc" y proporcioné el nombre DSN para mi base de datos de PostgreSQL. El asistente encontró las tablas bien, pero cuando fui a realizar la importación recibí el error
No se pudo recuperar la información de columna para los datos de origen y destino.
“Facturación” -> [dbo].[Facturación]:
– No se puede encontrar la columna -1.
Encontré la solución en la publicación del blog de Microsoft aquí. Aparentemente, el problema es que varios controladores ODBC usan diferentes nombres de atributos al informar los metadatos de las columnas. Para que la importación funcionara, tuve que editar el archivo "ProviderDescriptors.xml", que se encontraba en
C:\Archivos de programa\Microsoft SQL Server\100\DTS\ProviderDescriptors\ProviderDescriptors.xml
En el...
<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
... elemento que tuve que cambiar los 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"
/>
... a ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
Es decir, tuve que modificar el MaximumLengthColumnName
, NumericPrecisionColumnName
y NumericScaleColumnName
atribuir valores a "LENGTH"
, "PRECISION"
y "SCALE"
, respectivamente.
Una vez que se realizó ese cambio, la importación de PostgreSQL a SQL Server se ejecutó correctamente.