Ich hatte Probleme mit dem Importassistenten in SQL Server 2008 R2, um Tabellen aus PostgreSQL zu importieren. Ich hatte den PostgreSQL-ODBC-Treiber installiert, also habe ich für die Datenquelle im Import-Assistenten „.Net Framework Data Provider for Odbc“ ausgewählt und den DSN-Namen für meine PostgreSQL-Datenbank angegeben. Der Assistent fand die Tabellen in Ordnung, aber als ich den Import durchführte, bekam ich die Fehlermeldung
Spalteninformationen für die Quell- und Zieldaten konnten nicht abgerufen werden.
„Abrechnung“ -> [dbo].[Abrechnung]:
– Kann Spalte -1 nicht finden.
Ich habe die Lösung im Microsoft-Blogbeitrag hier gefunden. Anscheinend besteht das Problem darin, dass verschiedene ODBC-Treiber unterschiedliche Attributnamen verwenden, wenn sie Spaltenmetadaten melden. Damit der Import funktionierte, musste ich die Datei „ProviderDescriptors.xml“ bearbeiten, die sich unter
befandC:\Programme\Microsoft SQL Server\100\DTS\ProviderDescriptors\ProviderDescriptors.xml
Im ...
<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
... element Ich musste die Attribute von ... ändern
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "COLUMN_SIZE"
NumericPrecisionColumnName = "COLUMN_SIZE"
NumericScaleColumnName = "DECIMAL_DIGITS"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
... bis ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
Das heißt, ich musste MaximumLengthColumnName
anpassen , NumericPrecisionColumnName
und NumericScaleColumnName
Attributwerte zu "LENGTH"
, "PRECISION"
, und "SCALE"
.
Nachdem diese Änderung vorgenommen wurde, lief der Import von PostgreSQL nach SQL Server erfolgreich.