1

次の形式の数十万のレコードを含む csv カンマ区切りファイルがあります。

3212790556,1,0.000000,,0
3212790557,2,0.000000,,0

これで、SQL Server インポート フラット ファイル メソッドを使用すると、うまく機能します。テーブル名と列名が意味のあるものになるように、SQL を編集できます。さらに、データ型をデフォルトの varchar(50) から int または decimal に編集します。これはすべて正常に機能し、SQL インポートは正常にインポートできます。

ただし、次の一括挿入クエリを使用して同じタスクを実行することはできません。

BULK
INSERT temp1
FROM 'c:\filename.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

このクエリは、解決方法がわからない次の 3 つのエラーを返します。

Msg 4866, Level 16, State 1, Line 1
The bulk load failed. The column is too long in the data file for row 1, column 5. Verify that the field terminator and row terminator are specified correctly.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

私のアプリケーションの目的は、フォルダー内に複数の csv ファイルがあり、値の合計を照会できるように、すべてを単一のテーブルに入れる必要があることです。現時点では、(ファイルの数に応じて) ループで BULK 挿入を実行し、結果を返すプログラムを C# で作成することを考えていました。コードを書く必要はなく、これをすべて行うスクリプトを書くだけでよいと思います-誰でも正しい道に導くことができます:)

どうもありがとう。

編集:追加したばかり

ERRORFILE = 'C:\error.log'

クエリに追加すると、5221 行が挿入されます。5222 の場合もあれば 5222 の場合もありますが、この時点を超えると失敗します。何が問題なのかわからない??? CSV は問題ありません。

4

1 に答える 1

2

すすり泣き。なんてこった!!!

ROWTERMINATOR で \n を "0x0A" に置き換えるとは信じられません!!! 私は真剣に意味します。試してみただけでうまくいきました。すごい瞬間!! 完全に。

ただし、少し興味深いのは、SQL インポート ウィザードがインポートするのに約 10 秒しかかからないことです。インポート クエリには 1 分以上かかりました。推測はありますか??

于 2013-02-20T07:57:16.267 に答える