【问题标题】:Bulk insert CSV file批量插入 CSV 文件
【发布时间】:2013-02-20 17:16:22
【问题描述】:

我有一个创建 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)

我最初认为是生产数据库服务器与开发数据库服务器导致问题,但事实并非如此。

这是 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 代码创建的。

是否有任何编辑器可以向我显示文件的内容,与制表符、换行符等完全一样?

非常感谢任何帮助。

【问题讨论】:

  • 对于 csv 文件 FieldTerminator 应该是 ,。为什么要使用 \t 分隔符作为 csv 文件?如果您不将该文件存储为逗号分隔值,则可以将该文件另存为 .txt 而不是 .csv
  • 我使用 \t b/c 来区分我的字段。
  • 那么不要使用.csv扩展文件使用.txt.csv用于逗号分隔值。在csv 文件中,所有字段如果没有用, 分隔,则将被视为一列
  • 使用Notepad++,然后你可以点击“显示所有字符”按钮查看文件中所有的新行、制表符、回车等
  • 我建议检查明显的东西,比如你认为你加载的文件路径实际上是它试图加载的文件路径,等等。另外,你可以让 prod 文件加载到开发服务器上吗?

标签: java sql sql-server csv bulkinsert


【解决方案1】:

我的机器上在 Windows 上创建的那些在每行的末尾添加 CRLF。在 Uinx 上创建的产品仅添加 LF。解决方案是使用 MS SQL Server bcp 实用程序创建的格式文件,该实用程序适用于任何平台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多