BULK INSERT“列太长”错误

时间:2013-01-16 18:40:05

标签: sql-server sql-server-2008 bulkinsert

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

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

我得到的错误就是这个 -

  

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

现在这是第一行中的数据 -

 00000001^^18360713^295^4^0

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

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

4 个答案:

答案 0 :(得分:46)

我从Oracle / Unix中提取。我将\r\n替换为ROWTERMINATOR = '0x0a',它对我有用 非常感谢!

答案 1 :(得分:18)

如上所述,我在将csv文件导入SQL Server时遇到了同样的问题。我使用的是ROWTERMINATOR = '\n',我也尝试使用'\r\n''\r'。他们都没有工作。

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

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

答案 2 :(得分:4)

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

  

\ r \ n

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

答案 3 :(得分:2)

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

生成格式文件( .fmt或.xml )时,请注意左边的第3列。它的列称为 min length 。有时sql server将其默认为 2 ,尽管您没有在创建脚本中提及它。将该值更改为 0 。有时您可能还必须允许NULL,因此将其更改为零,它现在应该可以正常工作