プロが教えるわが家の防犯対策術!

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つのテーブルにインポートする」
というコードなのですが、どうやればよいのでしょうか?

A 回答 (2件)

>フィールド ターミネータ


エラーメッセージからして列区切りが認識されてないように思います。
区切りはTABコードでしょうか?
他の場合は、指定しないといけなかったように思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/01 13:34

インポートだけなら


BULK INSERT テーブル名 FROM 'ファイル名'
くらいでいいんじゃないですか?

インデックス等の設定で重複レコードがあると失敗するのと
CSVの1行目が邪魔っていうのはありますが…
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ですがエラーとなってしまいます。
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型もすべて一致しております。

お礼日時:2007/08/01 12:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています