web-dev-qa-db-ja.com

ExcelからSQLServer2005にインポートする切り捨てエラー

簡単に言うと、Excelドキュメントを1つずつ取得し、インポート/エクスポートウィザードを使用してSQLServer2005のデータベースにインポートします。

これが1つのレポートです(表示されていないすべてのプロセスは「成功」です)。切り捨てエラーを無視する方法はありますか?私はグーグルで無駄になっているか、少なくとも私のバージョンではそうではありません。

- Executing (Success)

- Copying to [Datadev].[dbo].[Sheet0$] (Error)
  Messages
  * Error 0xc020901c: Data Flow Task: There was an error with output

出力「Excelソース出力」(9)の列「値の意味の説明」(234)。返された列のステータスは、「テキストが切り捨てられたか、ターゲットコードページで1つ以上の文字が一致しませんでした。」でした。 (SQL Serverインポートおよびエクスポートウィザード)

  * Error 0xc020902a: Data Flow Task: The "output column "Value

意味の説明 "(234)"は切り捨てが発生したため失敗し、 "出力列"値の意味の説明 "(234)"の切り捨て行の配置は切り捨ての失敗を指定します。指定されたコンポーネントの指定されたオブジェクトで切り捨てエラーが発生しました。 (SQL Serverインポートおよびエクスポートウィザード)

  * Error 0xc0047038: Data Flow Task: SSIS Error Code

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

  * Error 0xc0047021: Data Flow Task: SSIS Error Code

DTS_E_THREADFAILED。スレッド "SourceThread0"がエラーコード0xC0047038で終了しました。この前に、スレッドが終了した理由の詳細を示すエラーメッセージが投稿される場合があります。 (SQL Serverインポートおよびエクスポートウィザード)

  * Error 0xc0047039: Data Flow Task: SSIS Error Code

DTS_E_THREADCANCELLED。スレッド "WorkThread0"はシャットダウン信号を受信し、終了しています。ユーザーがシャットダウンを要求したか、別のスレッドのエラーが原因でパイプラインがシャットダウンしています。スレッドがキャンセルされた理由の詳細が記載されたエラーメッセージがこの前に投稿される場合があります。 (SQL Serverインポートおよびエクスポートウィザード)

  * Error 0xc0047021: Data Flow Task: SSIS Error Code

DTS_E_THREADFAILED。スレッド "WorkThread0"がエラーコード0xC0047039で終了しました。この前に、スレッドが終了した理由の詳細を示すエラーメッセージが投稿される場合があります。 (SQL Serverインポートおよびエクスポートウィザード)

- Post-execute (Success)
  Messages
  * Information 0x402090df: Data Flow Task: The final commit for the

データ挿入を開始しました。 (SQL Serverインポートおよびエクスポートウィザード)

  * Information 0x402090e0: Data Flow Task: The final commit for the

データの挿入が終了しました。 (SQL Serverインポートおよびエクスポートウィザード)

- Cleanup (Success)
  Messages
  * Information 0x4004300b: Data Flow Task: "component "Destination -

Sheet0 $ "(323)"は210行を書き込みました。 (SQL Serverインポートおよびエクスポートウィザード)

15
scrot

ウィザードは、SQL Server 2000のウィザードで取得した値よりも小さい値をExcelデータの標準varcharサイズとして使用します。その結果、ステージングテーブルにすばやくインポートしようとしているデータが切り捨てられることがよくあります。ただし、ウィザードを実行すると、1つの画面でマッピングを編集するかどうかを尋ねられ、そこでフィールドのサイズを修正できます。または、最初にcreate table stamentを使用して、必要なサイズの作業テーブルを作成し(nvarchar(max)は、データを初めて見て、フィールドの大きさがわからない場合に適しています)、インポートすることができますそれに。 Excelでは、SQl Serverがデータ型を決定するために数行しか使用せず、最初の数レコードに基づいて整数であると考えたため、レコードの挿入が失敗する(たとえば、パーツ番号など)という問題が発生したこともわかっています。実際には文字列型のデータでした。また、このような問題が発生している可能性があるため、切り捨てエラーが発生しなくても、とにかくマッピングを確認することをお勧めします。

8
HLGEM

切り捨てエラーが発生した場合、8つのダミー行を挿入します。各セルには、長さが256を超えるジャンクテキストがあります。これにより、検出されたデータ型がvarchar(256)ではなくvarchar(max)になります。行が数値列の場合は数値(たとえば0)を入力する必要があり、日付の場合はダミーの日付を入力する必要があります。そうしないと、列にnullデータがインポートされます。

次に、インポート後にこれらのジャンク行を削除します。

15
Francis Huang

ここに 私のために働いたもの。

これは、スプレッドシート内の最初の8行のデータのみをチェックして、残りのすべてのデータの列サイズを決定するように指示する、レジストリ内のExcel内のすばらしい設定によるものです。これを修正するには、レジストリを変更して8から0に設定します。0に設定すると、スプレッドシート全体がチェックされます。これにより、ファイルが非常に大きい場合、最初のデータインポート中にパフォーマンスの問題が発生する可能性があります。検索するレジストリキーは次のとおりです(設定する必要のあるレジストリキーが複数ある場合があります)。

TypeGuessRows

5
Shaul Behr

http://support.Microsoft.com/kb/281517

TypeGuessRowsの値を変更するには、次の手順を実行します。1。[スタート]メニューで、[ファイル名を指定して実行]をクリックします。 [ファイル名を指定して実行]ダイアログボックスに「Regedt32」と入力し、[OK]をクリックします。 2.レジストリエディタで次のキーを開きます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

注64ビットシステムの場合、対応するキーは次のとおりです。

HKLM\SOFTWARE\wow6432node\Microsoft\jet\4.0\engines\Excel 3.TypeGuessRowsをダブルクリックします。 4. [DWORDエディタ]ダイアログボックスで、[ベース]の下の[小数]をクリックします。値データには、0から16までの値を入力します。 5. [OK]をクリックして、レジストリエディタを終了します。 (レジストリを変更せずに)この問題を回避する2番目の方法は、データが255文字以上のフィールドを持つ行がソースデータファイルの最初の8行に存在することを確認することです。

4
Suji

切り捨てエラーが発生しているSQLServerにExcel、CSV、またはテキストデータをときどきインポートする場合は、最初にデータをMS Accessにインポートしてから、アップサイジングウィザードを使用してSQLで直接テーブルを作成してデータを入力することをお勧めします。

1
mikelus

なぜエラーを無視したいのですか?それらを見つけて修正してみませんか?

いずれにせよ、ウィザードが提供する以上のことを行う必要がある場合は、SSIS(SQL Server Integration Services)を直接使用する必要があります。これがウィザードが使用しているものであり、エラーが正常であると想定できないだけです。

Excelファイルをループして一度に1つずつインポートするSSISパッケージを作成するのは非常に簡単です。インポートデータフローは、エラーを無視するか、エラーを報告するなど、エラーを処理するように構成できます。

1
John Saunders

SQL Server Import Wizardデータのインポートに使用しているファイルを指定する必要があるセクションに到達したらすぐに、[詳細]オプションをクリックします。これにより、すべてのフィールドが表示されます。入力ファイル内のフィールドプロパティと一緒に。変更する必要のあるプロパティは「DataType」です。通常、デフォルトは「string [DT_STR]」です。「textstream [DT_TEXT]」に変更すると、のサイズが大きくなります。フィールドは実質的に、したがって、おそらく切り捨てエラーを回避します。

0
user3357094