SQLServerで複数のCSVファイルを一括インポートする方法

このQ&Aのポイント
  • SQLServerで大量にあるCSVファイルを一括でインポートする方法について調べています。各CSVファイルには列名が書かれており、同じ構成ですが、コードが見つからず困っています。
  • MSDNで見つけたコードを試したところ、エラーメッセージ「列名 'IntCol' が無効です。」が表示されました。解決方法を教えてください。
  • 単純に同じ構成の複数のCSVファイルを1つのテーブルに一括でインポートする方法を教えてください。
回答を見る
  • ベストアンサー

SQLSever 一括インポートについて

SQLserver で大量にあるCSVファイルをインポートしたいのですが コードが分かりません。 各Csvファイルには1行目に列名が書かれており、全て同じ構成となっております。 MSDNで調べて下記コードを見つけたのですがうまく起動しません。 「列名 'IntCol' が無効です。」と出てしまいます。 ------------------------------------------------------------ -- Query before update shows initial state of XmlCol values. SELECT * FROM T UPDATE T SET XmlCol =( SELECT * FROM OPENROWSET( BULK 'C:\SampleFolder\SampleData3.txt', SINGLE_BLOB ) AS x ) WHERE IntCol = 1 GO ------------------------------------------------------------ 単純に 「同じ構成の複数あるcsvファイルを1つのテーブルにインポートする」 というコードなのですが、どうやればよいのでしょうか?

  • kikei
  • お礼率70% (82/116)

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

  • ベストアンサー
  • necomimi3
  • ベストアンサー率40% (124/307)
回答No.2

>フィールド ターミネータ エラーメッセージからして列区切りが認識されてないように思います。 区切りはTABコードでしょうか? 他の場合は、指定しないといけなかったように思います。

kikei
質問者

お礼

csvファイルなので列の区切りはカンマ(,)です。

その他の回答 (1)

  • necomimi3
  • ベストアンサー率40% (124/307)
回答No.1

インポートだけなら BULK INSERT テーブル名 FROM 'ファイル名' くらいでいいんじゃないですか? インデックス等の設定で重複レコードがあると失敗するのと CSVの1行目が邪魔っていうのはありますが…

kikei
質問者

お礼

回答ありがとうございます。 ですがエラーとなってしまいます。 bulk insert テーブル名 from 'C:\Temp\190401_01.csv' 結果 --------------------------------------------------------- メッセージ 4866、レベル 16、状態 1、行 1 一括読み込みに失敗しました。データ ファイルの行 1、列 1 で、列が長すぎます。フィールド ターミネータと行ターミネータが正しく指定されていることを確認してください。 メッセージ 7399、レベル 16、状態 1、行 1 リンク サーバー "(null)" の OLE DB プロバイダ "BULK" により、エラーがレポートされました。プロバイダからエラーに関する情報を取得できませんでした。 メッセージ 7330、レベル 16、状態 2、行 1 リンク サーバー "(null)" の OLE DB プロバイダ "BULK" から行をフェッチできません。 --------------------------------------------------------- 1行目の列名のせいでエラーが出てるのかと思い 下記コードで試してみたのですが bulk insert テーブル名 from 'C:\Temp\190401_01.csv' WITH (firstrow=2); GO --------------------------------------------------------- メッセージ 4866、レベル 16、状態 8、行 1 一括読み込みに失敗しました。データ ファイルの行 1、列 1 で、列が長すぎます。フィールド ターミネータと行ターミネータが正しく指定されていることを確認してください。 メッセージ 7301、レベル 16、状態 2、行 1 リンク サーバー "(null)" の OLE DB プロバイダ "BULK" から必要なインターフェイス ("IID_IColumnsInfo") を取得できません。 --------------------------------------------------------- となり、読み込めませんでした。 元となるテーブルと読み込むテーブルの列数に違いはありません。 また各列のvarchar型、int型、datetime型もすべて一致しております。

関連するQ&A

  • 複数のCSVファイルの一括インポートについて

    CSVファイルをインポートしたいと思っているのですが、 複数のファイルをいっぺんに複数のテーブルにインポートする方法が わからず困っています。200行8列の2000ファイルを、 テーブル1,テーブル2,テーブル3・・・・テーブル2000にそれぞれ 1ファイルずつを一回のSQL文でインポートするやり方です。 毎日ほぼ同じ量のデータをインポートする必要がありますので、 2000ファイルをファイル名などの固有の情報を付加し連結して、 1ファイルにしてしまい、1テーブルにインポートする方法だと SELECT文をかけたときに取得する時間がとてもかかってしまうような 気がしますので、、、

    • ベストアンサー
    • MySQL
  • 【ACCESS】インポート定義を使わないCSVインポート

    ACCESS VBAにてMDBにSQL文でCSVデータをINSERTしようとしています。INSERT自体はうまくいったのですが、データの型をうまくそろえられません。2日程ネットサーフィンしているものの良いサンプルを見つけられません。有識者の方、ご存知でしたら是非教えてください! まず、CSVデータは以下のようなものです。 ===aaa.csv=== 00000001,2009/1/31 00000002,2009/1/31 ・ ・ A000001,2009/1/31 Z000002,2009/1/31 ========== これを 既存テーブル:aaa_TBLに取り込ませたく、以下のSQL文を書きました。 INSERT INTO aaa_TBL(カラム1,カラム2) SELECT FORMAT([aaa#CSV].F1,'0000000'),[aaa#CSV].F2 FROM aaa#csv IN 'C:\' 'Text;HDR=NO' これにて「0000001」と「000002」等のレコードは正常に取り込むことができましたが、「A000001」「B000002」等のデータは取り込まれず、NULLにて登録されておりました。 (aaa_TBL自体はカラム1=テキスト型、カラム2=日付型でCreateされております。) これを回避したく、いろんなサイトを訪問したのですが、ほとんどがインポート定義を使った方法を推奨しておりました。 しかしながら、私にはどうしてもインポート定義が理解できないんです! 「VBAにて○○.iniを作成する方法」などをよく見かけるんですが、できるだけ他の方法を検討したいと考えております。(今後、ACCESS VBAから他言語への乗り換えを考えているとか、他CSVにてインポートされるテーブルの数が30個程あるので、インポート定義ファイルの管理がつらいな・・・とか色々他にも理由はあるんですが・・・・) 何か良い方法はないでしょうか?! やはりインポート定義を作らないとだめでしょうか?! その場合、簡単なサンプルコードなどを頂けますと非常に助かります。。。(MSサイトのサンプルコードは理解できませんでした。。。) まだVBAを勉強し始めて2週間なので、色々突っ込みどころはあると思いますが、どうぞよろしくお願いしますm(_ _)m

  • Access VBAでファイルのインポートについて

    あるディレクトリにAccessのmdbファイルを置き、「インポート」フォルダを隣に置きます。 このフォルダ内にCSVファイルを置き、それをVBAでテーブル「tbl_import」にインポートさせたいのです。 ちなみにインポート後はディレクトリ「インポート」下層のディレクトリ「インポート済」に移動させたいのです。 下記例文では「file.csv」と書いていますが、このファイル名はインポートの都度、常に変わります。 インポートさせるファイルは常に一つです。 「*」を用いれば出来ると思っていたのですが、うまくいきません。 良い方法を教示いただけませんか。 DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", CurrentProject.Path & "\インポート\file.csv", True FileCopy CurrentProject.Path & "\インポート\file.csv", CurrentProject.Path & "\インポート\インポート済\file.csv" Kill CurrentProject.Path & "\インポート\file.csv"

  • 文字コードの違うファイルインポート

    こんにちわ。 いつもお世話になっています。 文字コードの違うcsvファイルをTransferTextでインポートしたいのですが いい方法がなく困っています。 ご存知の方、ご教示下さい。 【経緯】 csvファイルはインターフェイス上では文字コードが「unicode」 で設定されているとの事でした。 mdbにてファイルのインポートを行うと文字化けするのでインポート定義を 設定してみた所、「UTF-8」だけが日本語にできたました。 しかし、インポートしてみるとカラム数が12個あったのに対して9個しか 取込できませんでした。 そこでそのcsvをエディタにて「名前を付けて保存」→文字コードを「SJIS」に変更して 保存し直しました。 その保存し直したcsvを読込するとカラム数も12個で文字も日本語でインポート できました。 どうしてもVBAでコマンドボタンを押下してインポートしたいのですが いい方法が見つかりません。 お知恵をお貸し下さい。 よろしくお願い致します。

  • CSVファイルをインポートさせたい

    先頭行がフィールド名をあらわしたCSVファイルがあるのですが、これをOracle10gXEにインポートさせるにはどうしたらよいのでしょうか? 文字コードも気にする必要がありますか?現在SJISファイルのCSVファイルがあります。

  • PHPでMySQLのデータのインポート&SELECT結果のダウンロード

    こんにちは。いつもここにはお世話になっています。 ご質問が何点かあって申し訳ないのですが、簡単に作ろうとしているスクリプトを説明すると一日一回夜中にCSVかTEXT形式でデータがアップされます。それをMysqlの指定したテーブルにインポートします。その際前日のデータは全て削除します。作られたCSVファイルも削除したいんです。翌日にそのインポートされたデータを検索し必要に応じて検索されたデータをダウンロードできるようにしたいんです。ダウンロードするファイルはCSVでファイル名はテーブル名に検索した時の時間をつけた名前。これを全てPHPで行いたいんです・・・。 現在検索とSSHでログインしてのMysqlにインポートはできました。ダウンロードはまだ挑戦していないのですが、まずファイルを作ることとPHPでのデータのインポートができるのかわかりません。 質問なのですが、 1.分かりにくいのですが、上記のようなことはPHPで可能でしょうか? 2.データのインポートはPHPではどのようにしたらいいのでしょうか? 3.テーブル内のデータの削除はDELETEを使えば可能なのはわかりましたが、指定したフォルダ内のファイルを削除する方法はありますか? 4.SELECTで検索したデータが画面に表示されダウンロードできるようにファイルを作るのに $sql = "SELECT * FROM テーブル名 WHERE フィールド = \"条件\" "; $sql .= "INTO OUTFILE \"/home/パス/テキスト.CSV(or txt)\""; $res = mysql_query($sql); とスクリプトを記述しましたが出来ませんでした。 SShでmysqlにログインをして mysql> SELECT * FROM テーブル名 WHERE フィールド = '条件' -> INTO OUTFILE '/home/パス/テキスト名.txt'; とするとできたのですが、単純にこれをSELECT等と同じようにしたらダメなのでしょうか? 質問が多く申し訳ないのですが、ご教授をよろしくお願いします。

    • ベストアンサー
    • PHP
  • CSVファイルからEXCELへのインポート

    下記の項目のCSVファイルをEXCELにインポートしようと思っております。 得意先コード、得意先名(漢字)、商品コード、商品名、売上数量、売上金額 このCSVファイルをEXCELにインポートする際、得意先ごとに別のシートにしたい(シート名は得意先名としたい)場合どのようにすればよいのか、アドバイスいただければと思っております。 宜しくお願い致します。

  • データの更新について

    csvなどのテキストファイルからデータを取り込んで会員テーブルに更新するSQLを作成したくて考えています。 csvファイル 項目1:会員コード 項目2:名称 項目3:電話番号 いいやり方ではないと思いますがうまくいった方法を以下に書きます。 (1)ワークテーブル作成(csvと同じ項目) テーブル名:ワーク会員 項目1:会員コード 項目2:名称 項目3:電話番号 (2)UPDATE文実行 update 会員 K1 set 名称 = (select K2.名称 from ワーク会員 K2 where K2.会員コード = K1.会員コード), 電話番号 = (select K3.電話番号 from ワーク会員 K3 where K3.会員コード = K1.会員コード) where K1.会員コード IN (select 会員コード from ワーク会員 ) ブサイクな方法でしょうか? 他にもっといい方法があればアドバイスお願いします。

  • 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のデータにインポートしたいだけです。 よろしくお願い致します。

  • pathを指定してCSVをインポートしたい

    すいません1つ質問があります。 こちらのサイトでCSVのファイルのインポート方法を勉強していますが、下記の方法だとあらかじめ、データベースが格納されているフォルダにCSVを置いてある前提でこのやり方をやります。 LOAD DATA INFILE "T01Prefecture.csv" INTO TABLE T01Prefecture FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; 僕が知りたいのは、例えば、 C:\Users\Ken\Desktop\T01Prefecture.csv ここに置いてあるCSVを指定してインポートしたいと考えています。 そのやり方がどうもこのパスを書くだけでは出来ないです。 どなたかやり方を教えて頂けますか? 僕が書いたのは下記の通りです。 LOAD DATA INFILE "C:\Users\Ken\Desktop\T01Prefecture.csv" INTO TABLE T01Prefecture FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; よろしくお願いいたします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう