2013-02-20 159 views
0

我有一個創建CSV文件的Java代碼,然後使用SQL Sever「BULK INSERT」將數據插入數據庫;我沒有格式文件。在SQL Server爲2008年批量插入CSV文件

當我運行代碼直通單元測試,然後運行下面的SQL代碼一切工作正常,得到的數據插入到表:

declare 
@csvFileName VARCHAR (1024)= 'file.csv', 
@csvFormatFileName VARCHAR (1024)= null, 
@tableName VARCHAR (256) = 'tableName'; 

EXECUTE (  
'BULK INSERT '+ @tableName +' FROM ''' + @csvFileName + ''' WITH 
(FIRSTROW=2, FIELDTERMINATOR=''\t'', ROWTERMINATOR=''\n'', MAXERRORS=0);'); 

當我的Java代碼在生產運行並創建CSV文件,如果我搶創建的CSV文件之一,並運行上面的SQL,它給了我沒有錯誤,但沒有數據被插入到表中,我只是得到:

(0 row(s) affected) 

我首先想到的其生產數據庫服務器與開發數據庫服務器,導致問題,但噸帽子並非如此。

這是CSV文件中的樣本數據:

ID Date number1 number2 number3 

88 2013-01-14 2 0 0.00 

64 2013-01-14 0 0 0.00 

我看不出有什麼區別的賭注。運行時沒有問題的CSV文件和沒有問題的文件!畢竟它們是用相同的Java代碼創建的。

是否有任何編輯器能夠像標籤,新行一樣向我顯示文件的內容......?

任何幫助,非常感謝。

+1

對於csv文件'FieldTerminator'應該是','。你爲什麼使用'\ t'分隔符作爲csv文件?如果不將它們存儲爲逗號分隔值,則可以將該文件保存爲'.txt'而不是'.csv'。 – 2013-02-20 17:19:45

+0

我使用\ t b/c分隔我的領域。 – blueSky 2013-02-20 17:23:34

+0

然後不要使用'.csv'擴展名來使用'.txt'文件,'.csv'用於逗號分隔值。如果在'csv'文件中沒有用','分隔所有字段將被視爲一列 – 2013-02-20 17:24:35

回答

1

我在Windows上創建的機器上的機器,它在每行的末尾添加了CRLF。在Uinx上創建的產品只添加了LF。解決方案是使用由MS SQL Server bcp實用程序創建的foramt文件,該文件適用於任何平臺。