SQL Server2008R2のインポートウィザードを使用してPostgreSQLからテーブルをインポートする際に問題が発生しました。 PostgreSQL ODBCドライバーをインストールしたので、インポートウィザードのデータソースに「.NetFramework Data Provider for Odbc」を選択し、PostgreSQLデータベースのDSN名を指定しました。ウィザードはテーブルを正常に検出しましたが、インポートを実行しようとするとエラーが発生しました
ソースデータと宛先データの列情報を取得できませんでした。
「請求」->[dbo]。[請求]:
–列-1が見つかりません。
私はここのマイクロソフトのブログ投稿で解決策を見つけました。明らかに問題は、さまざまな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からSQLServerへのインポートは正常に実行されました。