Имах проблеми с използването на съветника за импортиране в SQL Server 2008 R2 за импортиране на таблици от PostgreSQL. Имах инсталиран PostgreSQL ODBC драйвер, така че за източника на данни в съветника за импортиране избрах ".Net Framework Data Provider for Odbc" и предоставих DSN името за моята PostgreSQL база данни. Помощникът откри, че таблиците са наред, но когато отидох да извърша импортирането, получих грешката
Информацията в колоната за данните за източник и местоназначение не можа да бъде извлечена.
„Таксуване“ -> [dbo].[Таксуване]:
– Не може да се намери колона -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 се изпълнява успешно.