28

我正在尝试运行以下命令从 CSV 文件中批量插入数据——

 BULK INSERT TestDB.dbo.patent
 FROM 'C:\1patents.csv'
 WITH (FIRSTROW = 1,  FIELDTERMINATOR = '^', ROWTERMINATOR='\n');

我得到的错误是——

消息 4866,级别 16,状态 1,第 1 行
批量加载失败。数据文件中第 1 行第 6 列的列太长。
请验证是否正确指定了字段终止符和行终止符。
消息 7399,级别 16,状态 1,第 1 行
链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供商没有提供有关该错误的任何信息。
消息 7330,级别 16,状态 2,第 1
行无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”获取行。

现在这是第一行的数据——

 00000001^^18360713^295^4^0

在表中,最后一个字段(对应于上面的第 6 列数据 = 0)是“int”类型。

我在这里做错了什么?为什么我会收到上述错误?

4

4 回答 4

66

我从 Oracle/Unix 中提取。我取而代之\r\nROWTERMINATOR = '0x0a'它对我有用。
非常感谢 !

于 2014-11-05T13:21:30.157 回答
29

就像上面回答的那样,我在将 csv 文件导入 SQL Server 时遇到了同样的问题。我正在使用ROWTERMINATOR = '\n',我也尝试使用'\r\n'and '\r'。他们都没有工作。

但是使用ROWTERMINATOR = '0x0a'表加载时没有问题。

我不知道“为什么?” 在这背后,希望其他人可以阐明它。

于 2016-02-14T12:03:47.447 回答
4

除非文件源是 Unix,否则文件的行终止符很可能是真的

\r\n

要么使用十六进制编辑器来验证文件的终止符,要么只是尝试将其作为行终止符。

于 2013-01-16T18:45:21.517 回答
2

我遇到了类似的问题,并且知道除非文件是 UNIX 类型\r\n是可以的。

当您生成格式文件(.fmt 或 .xml)时,请注意左起第三列。它称为列的最小长度。尽管您在创建脚本中没有提到它,但有时 sql server 会将其默认为2 。将该值更改为0。有时您可能还必须允许 NULL ,因此将其更改为零,它现在应该可以工作

于 2017-10-20T16:44:47.840 回答