2013-02-20 87 views
1

我有一個CSV逗號分隔包含成千上萬的記錄如下格式文件:現在使用SQL Server導入平面文件方法的工作只是花花公子SQL大容量插入CSV

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

。我可以編輯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文件,都需要放在一個表中,以便我可以查詢值的總和。目前我正在考慮用C#編寫一個程序,它將在循環中執行BULK插入操作(根據文件數量),然後返回結果。我猜我不需要編寫代碼,我可以寫一個腳本來完成所有這些 - 任何人都可以引導我走向正確的道路:)

非常感謝。

編輯:剛纔添加

ERRORFILE = 'C:\error.log' 

的查詢和我得到插入5221行。有些時候它的5222是5222的幾倍,但它超過了這一點。不知道最新的問題? CSV非常好。

回答

2

SOB。 WTF!

我不相信用ROWTERMINATOR中的「0x0A」代替\ n!我的意思是認真。我只是試了一下,它的工作。 WTF時刻!完全。

但是,有趣的是SQL導入嚮導也只有大約10秒的時間才能導入。導入查詢耗時一分多鐘。任何猜測?

+0

不知道肯定,但它看起來像一個bug。 MS可能沒有測試指定'ROWTERMINATOR ='\ n'',因爲\ n是默認值。如果你把ROWTERMINATOR子句拿出來,我敢打賭它會起作用。至於性能差異,如果添加BATCHSIZE子句會發生什麼?我確定導入嚮導使用了一個。 – 2013-02-20 22:48:02