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 文件,所有这些文件都需要放在一个表中,以便我可以查询值的总和。目前我正在考虑用 C# 编写一个程序,该程序将在循环中执行 BULK 插入(根据文件数),然后返回我的结果。我猜我不需要编写代码,我可以编写一个脚本来完成所有这些 - 任何人都可以引导我走向正确的道路:)

非常感谢。

编辑:刚刚添加

ERRORFILE = 'C:\error.log'

到查询中,我插入了 5221 行。有时是 5222,有时是 5222,但超出这一点就失败了。不知道什么问题???CSV 非常好。

4

1 回答 1

2

哭泣。哇!!!!

我不敢相信在 ROWTERMINATOR 中用“0x0A”替换 \n 有效!!!我是认真的。我刚试了一下,它奏效了。WTF时刻!完全。

然而,有点有趣的是,SQL 导入向导也只需大约 10 秒即可导入。导入查询花了一分钟多的时间。有什么猜测吗??

于 2013-02-20T07:57:16.267 回答