9

インポート ウィザードを使用して、Excel から SQL Server にデータをインポートしようとしています。最初のステップではすべて問題ないようです。ウィザードは、Excel ファイルを読み取り、列を適切に識別することができます。しかし、プロセスが実際に実行される最後のステップでは、次のエラーが発生して失敗します。

エラー 0xc020901c: データ フロー タスク 1: 出力 "Excel ソース出力" (9) の出力列 "AlternateName" (24) でエラーが発生しました。返された列のステータスは、「テキストが切り捨てられたか、1 つ以上の文字がターゲット コード ページで一致しませんでした。」でした。(SQL Server インポートおよびエクスポート ウィザード)

エラー 0xc020902a: データ フロー タスク 1: 切り捨てが発生したため、"出力列 "AlternateName" (24)" が失敗しました。指定されたコンポーネントの指定されたオブジェクトで切り捨てエラーが発生しました。(SQL Server インポートおよびエクスポート ウィザード)

エラー 0xc0047038: データ フロー タスク 1: SSIS エラー コード DTS_E_PRIMEOUTPUTFAILED. コンポーネント "Source - Sheet1$" (1) の PrimeOutput メソッドがエラー コード 0xC020902A を返しました。パイプライン エンジンが PrimeOutput() を呼び出したときに、コンポーネントがエラー コードを返しました。エラー コードの意味はコンポーネントによって定義されますが、エラーは致命的であり、パイプラインは実行を停止しました。これより前に、失敗に関する詳細情報を含むエラー メッセージが投稿される場合があります。(SQL Server インポートおよびエクスポート ウィザード)

列 AlternateName の最大データ長は 658 文字です。宛先テーブルには、varchar(1000) として定義された列 AlternateName があります。そのため、なぜこのエラーが発生するのかわかりませんでした。しかし、その後、私はこれに気づきました

ここに画像の説明を入力

これが問題を引き起こしている可能性があるという予感があります。しかし、 varchar 255 として定義された Source 列を変更するにはどうすればよいでしょうか?

4

4 に答える 4

9

ウィザードで独自のクエリを作成し、列を varchar(1000) としてキャストする必要がある場合があります。これが機能するかどうかは 100% わかりません。または、シートの大きさはどれくらいですか? ウィザードは、データ型と幅を決定するために非常に多くの行 (デフォルトでは IIRC 10000、これはレジストリ設定です) だけを「調べます」。最も長い AlternateName 値が一番上になるように、Excel ファイルを再ソートします。

于 2011-09-15T15:50:55.840 に答える
4

私は同じ問題を抱えていました.1つの回避策は、インポートエクスポートウィザードが最初の200行のみをチェックするため、セルの長さに応じて、Excelドキュメントで問題を引き起こす大きな行を並べ替えることであることがわかりました.

行が並べ替えられた後、インポート エクスポート ウィザードはより長い長さを検出し、ソース列のデータ型を LongText に変更します。

ここに画像の説明を入力

于 2016-01-22T08:23:13.927 に答える