CSVファイルデータをSQL Serverに取り込む方法とエラーの解決法

このQ&Aのポイント
  • 日本郵便が提供している「郵便番号データダウンロード」を利用して、CSVファイルから郵便番号データをSQL Serverのデータベースに取り込む方法について説明します。
  • しかし、データの取り込み処理中にエラーが発生し、データ変換に失敗したというメッセージが表示されます。
  • このエラーの原因や解決法について詳しく調べても、現在のエラーと一致しない情報や、理解できない情報ばかりです。解決法が分かる方がいれば、教えていただきたいです。
回答を見る
  • ベストアンサー

CSVファイルのデータをDBに取り込みたい。

お世話になります。 現在、日本郵便が提供している「郵便番号データダウンロード」を利用して、全国の郵便番号をダウンロードして、SQL Serverのデータベースに新しくテーブルとして追加しようとしています。 しかし、データをインポートしようとすると必ずエラーが起こってしまい・・・同じようなエラー解決法をネットで探したのですが、現在起こっているエラーの解決法と違う?もしくは私が理解していないだけかもしれないのですが、もし解決法がお分かりになれば、噛み砕いてご教授願えればと思います。 以下環境およびエラー文章です。 開発環境:SQL Server2005 動作環境:Windows XP 「フラットファイルソース」からダウンロードしてきたCSVファイルを取り込み、先頭データ行を列名とし「SQL Native Client」のサーバに変換しようとしてエラーが出ました。 - 実行しています (エラー) メッセージ エラー 0xc02020a1: データ フロー タスク: データ変換に失敗しました。列 "ChoName" のデータ変換から、状態値 4 と状態を示すテキスト "テキストが切り捨てられたか、または対象になるコード ページで 1 つ以上の文字が一致しませんでした。" が返されました。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc020902a: データ フロー タスク: "出力列 "ChoName" (34)" が切り捨ての発生により失敗しました。"出力列 "ChoName" (34)" の切り捨て行の処理により、切り捨てによる失敗が示されます。ここに示されたコンポーネントのオブジェクトで切り捨てエラーが発生しました。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc0202092: データ フロー タスク: データ行 2050 で、ファイル "C:\Documents and Settings\Administrator\デスクトップ\加山\住所\ken_all\KEN_ALL.CSV" の処理中にエラーが発生しました。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc0047038: データ フロー タスク: コンポーネント "変換元 - KEN_ALL_CSV" (1) の PrimeOutput メソッドからエラー コード 0xC0202092 が返されました。パイプライン エンジンが PrimeOutput() を呼び出したときに、このコンポーネントからエラー コードが返されました。このエラー コードの詳細はコンポーネントで定義されていますが、これは致命的なエラーであり、パイプラインの実行は停止されました。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc0047021: データ フロー タスク: エラー コード 0xC0047038 により、スレッド "SourceThread0" は終了しました。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc0047039: データ フロー タスク: スレッド "WorkThread0" はシャットダウンの通知を受け取ったので終了処理中です。ユーザーがシャットダウンを要求したか、別のスレッド内のエラーが原因でパイプラインがシャットダウンされています。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc0047021: データ フロー タスク: エラー コード 0xC0047039 により、スレッド "WorkThread0" は終了しました。 (SQL Server インポートおよびエクスポート ウィザード) よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

それはつまり、該当する列(日本語で町名が入っているところだと思いますが)の取込み時の長さが足りなくて、切れることにより エラーが発生しているということです。 テーブルのサイズではなくファイルを読みだす設定の方です。 デフォルト設定は50バイトになってしまうため、変更してあげないといけません。 「フラットファイルソース」の詳細設定で個別に列の設定ができますので、該当列についてOutputColumnWidthを50→100に 変更してみてください。

yamikawa
質問者

お礼

ご回答ありがとうございます! ご回答の方法でやってみた所、まさしくそこでした! ずっと、テーブル側ばかり見て唸っていましたが、読み出すほうだったのですね・・・読むほうはカンマ区切りの設定だったので、自然とカンマ単位で読んでもらえるものかと思っていました。勉強不足ですね・・・ おかげ様で無事データを取り込む事が出来ました。本当にありがとうございました!

関連するQ&A

  • OracleからSQLServer 2008へのデータのインポート

    Oracleからデータを取得し、SQL Server 2008へデータをインポートした際に、下記のエラーが発生します。これはどういう状態でしょうか? データ長がオーバーしているという事はないはずですので、何か別の問題がおきているのかと思われますが。。 どなたか是非、ご教授お願い致します。 メッセージ エラー 0xc02020c5: データ フロー タスク 1: 列 "xxxxxxxxx" (41) を列 "xxxxxxxxx" (485) に変換しているときに、データ変換に失敗しました。この変換により、状態値 4 と状態を示すテキスト "テキストが切り捨てられたか、または対象になるコード ページで 1 つ以上の文字が一致しませんでした。" が返されました。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc020902a: データ フロー タスク 1: "出力列 "xxxxxxxxx" (485)" が切り捨ての発生により失敗しました。"出力列 "xxxxxxxxx" (485)" の切り捨て行の処理により、切り捨てによる失敗が示されます。ここに示されたコンポーネントのオブジェクトで切り捨てエラーが発生しました。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc0047022: データ フロー タスク 1: SSIS エラー コード DTS_E_PROCESSINPUTFAILED。入力 "データ変換の入力" (446) の処理中に、コンポーネント "データ変換 0 - 0" (445) の ProcessInput メソッドがエラー コード 0xC020902A で失敗しました。このコンポーネントは、ProcessInput メソッドからエラーを返しました。このエラーはコンポーネントに固有のものですが、致命的なエラーであるため、データ フロー タスクの実行は停止されます。このエラーの前に、エラーの詳細が記載されたエラー メッセージが報告されている可能性があります。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc02020c4: データ フロー タスク 1: エラー コード 0xC0047020 により、データ フロー タスク バッファに行を追加できませんでした。 (SQL Server インポートおよびエクスポート ウィザード) エラー 0xc0047038: データ フロー タスク 1: SSIS エラー コード DTS_E_PRIMEOUTPUTFAILED。コンポーネント "変換元 - xxxxxxxxx" (1) の PrimeOutput メソッドからエラー コード 0xC02020C4 が返されました。パイプライン エンジンが PrimeOutput() を呼び出したときに、このコンポーネントからエラー コードが返されました。このエラー コードの意味はコンポーネントで定義されていますが、これは致命的なエラーであるため、パイプラインの実行は停止されました。このエラーの前に、エラーの詳細が記載されたエラー メッセージが報告されている可能性があります。 (SQL Server インポートおよびエクスポート ウィザード)

  • データのインポートに失敗します。

    SQL Server2005を使用しているのですが、データのインポート時に下記のエラーメッセージが出て失敗します。 警告 0x802092a7: データ フロー タスク: 長さ 50 のデータ フロー列 "列 XXX" から、長さ 48 のデータベース列 "ABCDEF" にデータを挿入することにより、切り捨てが行われる可能性があります。 (SQL Server インポートおよびエクスポート ウィザード) このエラーの回避方法をご存知の方がいらっしゃいましたら教えてください。よろしくお願いします。

  • データのインポートについて

    SQL Server 2005 Developer Editionを使っています。 データのインポートに関して、ご教授をお願い致します。 ■質問 インポート(データベースを右クリックし、【タスク】より 【データのインポート】を選択している)機能について、 エラーを発生させずに、インポートをすることができるのか。 ■状況 エクセルにデータをエクスポートしたものを、インポートしようと したときに、エラーが発生します。そのテーブルデータは、 SQLでインサートすることはできるものの、インポート機能を使って インサートをすることができません。 ■知りたいこと ・インポートができない理由について。  ⇒インポートができる方法について。 ・インポート機能は、エラーがよく発生するものなのか。 以上、ご教授をお願い致します。

  • データをCSVでエクスポートしたい

    SQL ServerでデータをCSV形式にエクスポート したいのですが、SQLクエリにて実行させるには どのようなクエリを発行すればできますでしょうか。 よろしくお願いいたします。

  • MySQLからSQL Server 2005へ移行

    MySQL4.0.26からSQL Server 2005にデータをコンバートしたいのですが、SQL Server Management Studioの「SQL Server インポートおよびエクスポート ウィザード」のデータソースの一覧に、MySQL ODBC 3.51 Driverがのってこず選べません。どうすれば追加できるのでしょうか? また、これ以外でもいい方法があれば教えて下さい。

  • データからの不要コード削除

    SQL Server にあるテーブルとテキストファイル間のインポート時のトラブルです。どなたかご教示お願いします。 1.テーブルQA にデータが入っています Answerフィールドはvarchar(500) 2.1のデータをテキストファイル(タブ区切り) にエクスポートする>QA.txt 3. QA.txt から SQL のテーブルにデータをインポートすると エラーとなる 原因:Answer フィールドに改行などのコードが含まれていて テキストファイルに落としたときに これらのコードにより改行されたりして フィールドの形態が壊れているから (QA.txtエクセルで開いて確認) SQL上で テーブル内のデータからこれらのコードを削除する作業を行った上でテキストファイルにエクスポートすればよいかと思いますが その削除するコードはどのように指定すればよいでしょうか。 改行が含まれているようだったので下記を実行しましたが それでも不要コードがまだ残っています。 update QA set AnswerName = replace(answerName,' ', '') where AnswerName like '% %' よろしくお願いいたします。

  • オブジェクトエクスポーラを使ったインサートについて

    はじめまして OS vista Ultimate Sql Server2005, Accsess2003 SqlServer2005のオブジェクトエクスポーラのタスク、データのインポートを使ってAccess2003で作ったデータをインポートしたいのですがエラーでうまくいきません。手順は、Sqlserverで構造が定義されたテーブルをオブジェクトエクスポーラのデータのエクスポートでAccessの空テーブルにエクスポートしそれをAccessで加工し、そのデータをインポートしたいのですが下記エラーとなります。 何か回避策があれば教えて頂きたいのですが。 ・FOREIGN KEY 制約でテーブル 'Teble1' が参照されているので、このテーブルは切り捨てられません。 よろしくお願いします。

  • SQL ServerにCSVをインポート

    SQL Server Express 2012にCSVファイルのデータをインポートさせたいと思っています。 SQL Server のデータのうち、主キーはdate型、その他はbit型、nvarchar型です。 SQL Serverのテーブルのデータには、#2013-01-01#, #False#, "あいう"などというデータがあります。 CSVは、Event.csvというデータです。 インポートするにあたって、BULK INSERTを利用しようとしています。 上記のデータで下記のコードをSQL Server Managemant Studio Expressで実行するとエラーとなります。 FROM 'D:\Business\Data\Event.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); データを別の文字列にするべきなのか、#で日付やブール値を囲わない方がよいのか、あるいはカラム名の入ったCSVを用意するべきなのかなど、疑問が多いのですが、実際はどうあるべきなのでしょうか。 なお、上記のデータはもともとExcel のデータをVBAを使ってCSVファイルに出力したものなので、CSVの形式を別の状態のデータに変換することはできます。 もともとの目的は、ExcelのデータをSQL Serverのデータにインポートしたいだけです。 よろしくお願い致します。

  • データのインポートの速度について

    mysqlの1個のテーブル(約1万行)をphpMyAdminでエクスポートしました。エクスポートは一瞬で終わりました。 それを再びphpMyAdminからインポートしようとしたのですが、データが重いらしくタイムアウトのエラーが出てしまいました。 sqlファイルを開いてみると、テーブルへのinsert文が約200行ずつのかたまりごとに区切られてしました。 きっとphpMyAdminの方で、エクスポートする時、「これくらいのかたまりずつ区切っておかないと、スムーズにインポートできなくてエラーになっちゃうよ」と気を利かせて区切ってくれているのだろうと思います。 仕方ないので、sqlファイルを「約200行ずつのinsert文」に分割して、phpMyAdminからインポートしました。 全部で1万行ほどのデータなので、50回ほどその作業を繰り返しました。 エクスポートはスムーズだったので、インポートがこんなに手間がかかるとは思っていませんでした。 最初にその1万行のデータをテーブルに読み込ませたのは、別のcsvファイルを load data infile したり、項目の並び順を入れ替えて insert したりするphpファイルを書いたのですが、さほど重くもなくスムーズに処理できました。 phpMyAdminを使わない方法の方が圧倒的に早い気がするのですが、大きいデータをインポートする際のスムーズな方法がありましたら、アドバイスいただけますでしょうか?

  • WADAXからロリポップへDBのコピー

    お世話になります。 先日からWADAXからロリポップ内のサーバーへDBをエクスポート・インポートしているのですがどうも上手くいかず困っています・・・。 ■WADAX・・・PHP5 phpMyAdmin:2.10.0.2 ■ロリポップ・・・PHP5 phpMyAdminの2.6.0 具体的なエラーとしてはWADAX側でメールなどのやり取りの入ったデータ(Message.sql)をエンコードなどなしのnonでエクスポートし、その後ロリポップ側の「SQL」からインポートしたところ、 「Warning: mb_strpos(): Unknown encoding or conversion error. in /home/sites/lolipop.jp/web/pma/libraries/string.lib.php on line 112」 「#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARSET=utf8' at line 30」 などと英文エラーが出てしまい、見る限り文字化けをしている様子でした。 (1)phpMyadminのバージョンが違う場合はインポートエクスポートが上手くいかないのでしょうか? (2)その他何か解決策などあればアドバイス頂けると嬉しいです(x_x;) よろしくお願い致します。

    • ベストアンサー
    • MySQL