Jeg havde problemer med at bruge Import Wizard i SQL Server 2008 R2 til at importere tabeller fra PostgreSQL. Jeg havde PostgreSQL ODBC-driveren installeret, så for datakilden i Import Wizard valgte jeg ".Net Framework Data Provider for Odbc" og angav DSN-navnet til min PostgreSQL-database. Guiden fandt tabellerne i orden, men da jeg gik for at udføre importen, fik jeg fejlen
Kolonneoplysninger for kilde- og destinationsdataene kunne ikke hentes.
"Fakturering" -> [dbo].[Fakturering]:
– Kan ikke finde kolonne -1.
Jeg fandt løsningen i Microsofts blogindlæg her. Tilsyneladende er problemet, at forskellige ODBC-drivere bruger forskellige attributnavne, når de rapporterer kolonnemetadata. For at få importen til at fungere var jeg nødt til at redigere filen "ProviderDescriptors.xml", som var placeret på
C:\Program Files\Microsoft SQL Server\100\DTS\ProviderDescriptors\ProviderDescriptors.xml
I ...
<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
... element Jeg var nødt til at ændre attributterne fra ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "COLUMN_SIZE"
NumericPrecisionColumnName = "COLUMN_SIZE"
NumericScaleColumnName = "DECIMAL_DIGITS"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
... til ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
Det vil sige, jeg var nødt til at justere MaximumLengthColumnName
, NumericPrecisionColumnName
, og NumericScaleColumnName
attribut værdier til "LENGTH"
, "PRECISION"
og "SCALE"
hhv.
Da denne ændring var foretaget, kørte importen fra PostgreSQL til SQL Server med succes.