批量插入CSV文件

时间:2013-02-20 17:16:22

标签: java sql sql-server csv bulkinsert

我有一个创建CSV文件的Java代码,然后我使用SQL Sever“BULK INSERT”将数据插入数据库;我没有格式文件。 SQL服务器是2008年。

当我通过单元测试运行代码然后运行以下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)

我首先想到的是生产数据库服务器与dev数据库服务器导致问题,但事实并非如此。

这是CSV文件中的示例数据:

ID  Date    number1 number2 number3

88  2013-01-14  2   0   0.00

64  2013-01-14  0   0   0.00

我看不出任何差异。运行没有问题的CSV文件和没有问题的CSV文件!毕竟它们是用相同的Java代码创建的。

是否有任何编辑器可以向我显示文件的内容与tab,new line,...?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我在Windows上创建的计算机上的每个行末尾都添加了CRLF。在Uinx上创建的生产只添加LF。解决方案是使用由MS SQL Server bcp实用程序创建的foramt文件,该文件适用于任何平台。