Miałem problemy z używaniem Kreatora importu w SQL Server 2008 R2 do importowania tabel z PostgreSQL. Miałem zainstalowany sterownik PostgreSQL ODBC, więc jako źródło danych w Kreatorze importu wybrałem ".Net Framework Data Provider for Odbc" i podałem nazwę DSN dla mojej bazy danych PostgreSQL. Kreator znalazł tabele w porządku, ale kiedy poszedłem wykonać import, pojawił się błąd
Nie można pobrać informacji o kolumnach dla danych źródłowych i docelowych.
„Płatności” -> [dbo].[Płatności]:
– Nie można znaleźć kolumny -1.
Znalazłem rozwiązanie w poście na blogu Microsoftu tutaj. Najwyraźniej problem polega na tym, że różne sterowniki ODBC używają różnych nazw atrybutów podczas raportowania metadanych kolumn. Aby import działał, musiałem wyedytować plik "ProviderDescriptors.xml", który znajdował się pod adresem
C:\Program Files\Microsoft SQL Server\100\DTS\ProviderDescriptors\ProviderDescriptors.xml
W ...
<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
... element musiałem zmienić atrybuty z ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "COLUMN_SIZE"
NumericPrecisionColumnName = "COLUMN_SIZE"
NumericScaleColumnName = "DECIMAL_DIGITS"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
... do ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
Oznacza to, że musiałem dostosować MaximumLengthColumnName
, NumericPrecisionColumnName
i NumericScaleColumnName
wartości atrybutów do "LENGTH"
, "PRECISION"
i "SCALE"
, odpowiednio.
Po wprowadzeniu tej zmiany import z PostgreSQL do SQL Server przebiegł pomyślnie.