83

大きな CSV ファイル (数ギグ) を に挿入しようとしていますSQL Serverが、 を通過しImport Wizardて最終的にファイルをインポートしようとすると、次のエラー レポートが表示されます。

  • 実行中 (エラー) メッセージ

エラー 0xc02020a1: データ フロー タスク 1: データ変換に失敗しました。列 ""Title"" のデータ変換で、ステータス値 4 とステータス テキスト "テキストが切り捨てられたか、ターゲット コード ページで一致する文字が 1 つ以上ありませんでした。" が返されました。

( SQL Server Import and Export Wizard)

エラー 0xc020902a: データ フロー タスク 1: 切り捨てが発生したため、"ソース - Train_csv.Outputs[フラット ファイル ソース出力].Columns["タイトル"]" が失敗し、"ソース - Train_csv.Outputs[フラット ファイル ソースOutput].Columns["Title"]" は切り捨ての失敗を指定します。指定されたコンポーネントの指定されたオブジェクトで切り捨てエラーが発生しました。

( SQL Server Import and Export Wizard)

エラー 0xc0202092: データ フロー タスク 1: データ行 2 のファイル "C:\Train.csv" の処理中にエラーが発生しました。

( SQL Server Import and Export Wizard)

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

( SQL Server Import and Export Wizard)

最初にファイルを挿入するテーブルを作成し、各列に varchar(MAX) を保持するように設定したため、この切り捨ての問題が引き続き発生する方法がわかりません。私は何を間違っていますか?

4

6 に答える 6

199

SQL Server インポートおよびエクスポート ウィザードでは、Advancedタブでソース データ型を調整できます (これらは、新しいテーブルを作成する場合は出力のデータ型になりますが、それ以外の場合はソース データの処理にのみ使用されます)。

データ型は MS SQL のデータ型とは厄介なほど異なり、出力列VARCHAR(255)DT_STR幅は に設定できます255。それVARCHAR(MAX)DT_TEXTです。

そのため、[データ ソース] 選択のAdvancedタブで、問題のある列のデータ型を からDT_STRDT_TEXT変更します (複数の列を選択して、一度にすべて変更できます)。

インポートおよびエクスポート ウィザード - データ ソース - 詳細設定

于 2013-09-03T20:04:03.370 に答える
2

この回答は普遍的に当てはまるわけではありませんが、小さなテキスト ファイルをインポートするときに発生していたこのエラーの発生を修正しました。フラット ファイル プロバイダーは、ソース内の固定の 50 文字のテキスト列に基づいてインポートしていましたが、これは正しくありませんでした。宛先列を再マッピングしても問題に影響はありませんでした。

この問題を解決するには、フラット ファイル プロバイダーの [データ ソースの選択] でファイルを選択した後、入力列リストの下に [型を提案] ボタンが表示されます。このボタンをクリックすると、使用中のダイアログに変更が加えられていなくても、フラット ファイル プロバイダーはソース .csv ファイルを再クエリし、ソース ファイル内のフィールドの長さを正しく判断しました。

これが完了すると、インポートはそれ以上問題なく続行されました。

于 2016-01-21T17:13:47.187 に答える
0

バグだと思います。回避策を適用してから、もう一度お試しください: http://support.microsoft.com/kb/281517 .

また、[詳細] タブに移動し、[ターゲット列の長さ] が Varchar(max) であるかどうかを確認します。

于 2013-09-03T19:48:33.677 に答える
0

問題: Jet OLE DB プロバイダーはレジストリ キーを読み取り、ソース列の型を推測するために読み取る行数を決定します。デフォルトでは、このキーの値は 8 です。したがって、プロバイダーはソース データの最初の 8 行をスキャンして、列のデータ型を決定します。いずれかのフィールドがテキストのように見え、データの長さが 255 文字を超える場合、その列はメモ フィールドとして入力されます。そのため、ソースの最初の 8 行に 255 文字を超える長さのデータがない場合、Jet はデータ型の性質を正確に判断できません。エクスポートされたシートのデータの最初の 8 行の長さは 255 未満であるため、ソースの長さを VARCHAR(255) と見なし、それ以上の長さの列からデータを読み取ることができません。

修正: 解決策は、コメント列を降順で並べ替えることです。2012 年以降、インポート ウィザードの [詳細] タブで値を更新できます。

于 2015-09-01T06:56:18.883 に答える
0

詳細タブに移動---->列のデータ型--->ここでデータ型をDT_STRからDT_TEXTに変更し、列幅を255に変更します。これで、完全に機能することを確認できます。

于 2015-06-19T21:30:24.213 に答える
0

詳細エディターでは問題が解決されませんでした。その代わりに、メモ帳 (またはお気に入りのテキスト/xml エディター) を使用して dtsx ファイルを編集し、属性の値を手動で次のように置き換える必要がありました。

length="0" dataType="nText"(私はユニコードを使用しています)

text/xml モードで編集する前に、必ず dtsx ファイルのバックアップを作成してください。

SQL Server 2008 R2 の実行

于 2015-06-16T11:59:34.470 に答える