- ベストアンサー
SQLServerで複数のCSVファイルを一括インポートする方法
- SQLServerで大量にあるCSVファイルを一括でインポートする方法について調べています。各CSVファイルには列名が書かれており、同じ構成ですが、コードが見つからず困っています。
- MSDNで見つけたコードを試したところ、エラーメッセージ「列名 'IntCol' が無効です。」が表示されました。解決方法を教えてください。
- 単純に同じ構成の複数のCSVファイルを1つのテーブルに一括でインポートする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>フィールド ターミネータ エラーメッセージからして列区切りが認識されてないように思います。 区切りはTABコードでしょうか? 他の場合は、指定しないといけなかったように思います。
その他の回答 (1)
- necomimi3
- ベストアンサー率40% (124/307)
インポートだけなら BULK INSERT テーブル名 FROM 'ファイル名' くらいでいいんじゃないですか? インデックス等の設定で重複レコードがあると失敗するのと CSVの1行目が邪魔っていうのはありますが…
お礼
回答ありがとうございます。 ですがエラーとなってしまいます。 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型もすべて一致しております。
お礼
csvファイルなので列の区切りはカンマ(,)です。