フラットファイルをoledbターゲットSQLサーバーデータベースにインポートしようとしています。
ここに私にトラブルを与えているフィールドがあります:
そのフラットファイル接続のプロパティ、特にフィールドは次のとおりです。
エラーメッセージは次のとおりです。
[ソース-18942979103_txt [424]]エラー:データ変換に失敗しました。列「recipient-name」のデータ変換は、ステータス値4およびステータステキスト「テキストが切り捨てられたか、1つ以上の文字がターゲットコードページで一致しませんでした」を返しました。
私は何を間違えていますか?
これは古い質問です。長さを増やしたり、データ型テキストに変更したりして失敗した後、私がそれを解決した方法は、xlsxファイルを作成してインポートすることでした。すべての列をvarchar(50)として設定する代わりに、データ型を正確に検出しました。その列のnvharchar(255)もそれを行っていたはずです。
この問題は、ソースデータ(xls、csvなど)を並べ替えて、ファイルの一番上に最長のテキスト値が表示されるようにすることで解決しました。 Excelは素晴らしいです。挑戦的な列でLEN()関数を使用します。データセットの一番上にある最も長い値で、その長さの値で並べ替えます。セーブ。インポートを再試行してください。
SQL Serverは、適切なデータ型を提案できる場合があります(デフォルトで適切な型を選択しない場合でも)-「候補型」ボタン(上記のスクリーンショットに表示)をクリックすると、SQL Serverでソースをスキャンできますエラーをスローしているフィールドのデータ型を提案します。私の場合、20000行をスキャンして候補を生成することを選択し、結果の推奨データ型を使用して問題を修正しました。
SQl Management Studioのデータインポートは、最初の数行を見て、ソースデータの仕様を決定します。
最も長いテキストが先頭になるようにレコードを移動します。
2つの異なるデータベース(DB2とSQL)に対して同様の問題が発生しました。最後に、DB2からのソースクエリでCAST
を使用して解決しました。また、ソース列をvarchar
に適合させ、無駄な空白スペースを回避することで、クエリを使用することも活用しています。
CAST(RTRIM(LTRIM(COLUMN_NAME)) AS VARCHAR(60) CCSID UNICODE
FOR SBCS DATA) COLUMN_NAME
ここで重要な問題は、CCSID変換です。
上記で提案されたアプローチ(@chookoos、 このq&a Excelブックに変換)およびインポートは、これらの種類の問題を解決しますが、このソリューション- 別のq&aのこのソリューション は優れているためcsv、tsv、またはtxtファイルを使用して、Microsoft製品関連のソリューションを作成せずに必要な微調整を実行できます
上記のどれも私にとってはうまくいきませんでした。ソースファイルのExcelファイルを単一のxls Worksheet Excel 5.0/95として保存し、列見出しなしでインポートすることで問題を解決しました。また、SQLにテーブルを作成させる代わりに、テーブルを事前に作成し、手動でマップしました。
通常、接続マネージャーでは50文字のままである可能性があるため、接続マネージャー->詳細に移動して100に変更するか、十分に大きい場合は1000にすることで問題を解決しました