我正在尝试运行以下命令批量插入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'。
我在这里做错了什么?为什么我会收到上述错误?
答案 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,因此将其更改为零,它现在应该可以正常工作