У меня были проблемы с использованием мастера импорта в SQL Server 2008 R2 для импорта таблиц из PostgreSQL. У меня был установлен драйвер PostgreSQL ODBC, поэтому для источника данных в мастере импорта я выбрал «Поставщик данных .Net Framework для Odbc» и предоставил имя DSN для своей базы данных PostgreSQL. Мастер нашел таблицы в порядке, но когда я пошел на импорт, я получил ошибку
Не удалось получить информацию столбца для данных источника и назначения.
«Billing» -> [dbo]. [Billing]:
- Не удается найти столбец -1.
Я нашел решение в сообщении в блоге Microsoft здесь . Очевидно, проблема в том, что различные драйверы ODBC используют разные имена атрибутов при сообщении метаданных столбца. Чтобы начать импорт, мне пришлось отредактировать файл «ProviderDescriptors.xml», который находился по адресу
C: \ Program Files \ Microsoft SQL Server \ 100 \ DTS \ ProviderDescriptors \ ProviderDescriptors.xml
В ...
<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
... элемент Мне пришлось изменить атрибуты с ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "COLUMN_SIZE"
NumericPrecisionColumnName = "COLUMN_SIZE"
NumericScaleColumnName = "DECIMAL_DIGITS"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
... до ...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
То есть мне пришлось настроить значения атрибутов MaximumLengthColumnName
, NumericPrecisionColumnName
и NumericScaleColumnName
на "LENGTH"
, "PRECISION"
и "SCALE"
соответственно.
После того, как это изменение было сделано, импорт из PostgreSQL в SQL Server был успешно выполнен.