web-dev-qa-db-ja.com

各列にvarchar(MAX)が使用されているにもかかわらず、CSVファイルのインポート中にSQL Serverでエラーが発生する

大きなCSVファイル(いくつかのギグ)をSQL Serverに挿入しようとしていますが、インポートWizardを実行し、最後にファイルをインポートしようとすると、次のエラーレポートが表示されます。

  • (エラー)メッセージの実行エラー0xc02020a1:データフロータスク1:データ変換に失敗しました。列 "" Title ""のデータ変換は、ステータス値4とステータステキスト "テキストが切り捨てられたか、ターゲットコードページで1つ以上の文字が一致しませんでした。"を返しました。 (SQL Serverインポートおよびエクスポートウィザード)

  • エラー0xc020902a:データフロータスク1: "Source-Train_csv.Outputs [Flat File Source Output] .Columns [" Title "]"は、切り捨てが発生したため失敗し、 "Source-Train_csv.Outputs [Flat File Source]の切り捨て行の後処理Output] .Columns ["Title"] "は、切り捨ての失敗を指定します。指定されたコンポーネントの指定されたオブジェクトで切り捨てエラーが発生しました。 (SQL Serverインポートおよびエクスポートウィザード)

  • エラー0xc0202092:データフロータスク1:データ行2のファイル "C:\ Train.csv"の処理中にエラーが発生しました(SQL Server Import and Export Wizard)

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

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

57
GMS

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

データ型はMS SQLのものとはいらいらして異なり、VARCHAR(255)の代わりにDT_STRであり、出力列の幅を255に設定できます。 VARCHAR(MAX)の場合、DT_TEXTです。

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

Import and Export Wizard - Data Source - Advanced

155
Hart CO

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

この問題を解決するには、フラットファイルプロバイダーの[データソースの選択]で、ファイルを選択した後、入力列リストの下に[候補の種類]ボタンが表示されます。このボタンを押した後、使用中のダイアログに変更が加えられなかった場合でも、フラットファイルプロバイダーはソース.csvファイルを再クエリし、正しくソースファイルのフィールドの長さを決定しました。

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

1
David W

高度なエディターは私の問題を解決しませんでしたが、代わりにメモ帳(またはお好みのtext/xmlエディター)でdtsx-fileを編集し、属性の値を手動で置換することを余儀なくされました

length="0"dataType="nText"(Unicodeを使用しています)

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

SQL Server 2008 R2の実行

0
dbd

バグだと思うので、回避策を適用してから再試行してください: http://support.Microsoft.com/kb/281517

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

0
Sonam

[詳細設定]タブに移動---->列のデータ型--->ここで、データ型をDT_STRからDT_TEXTおよび列幅255に変更します。これで、正常に動作することを確認できます。

0
Lokesh

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

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

0
Tapas