BULK INSERT"列太长"错误

Arv*_*ind 24 sql-server bulkinsert sql-server-2008

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

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

我得到的错误是 -

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

现在这是第一行的数据 -

 00000001^^18360713^295^4^0
Run Code Online (Sandbox Code Playgroud)

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

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

小智 51

我从Oracle/Unix中提取.我换\r\nROWTERMINATOR = '0x0a',它对我有用.
非常感谢 !


com*_*iro 18

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

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

我不知道"为什么?" 在这背后,希望其他人能够揭开它.


Eri*_* J. 4

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

\r\n

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

  • 这里的答案:http://stackoverflow.com/a/4207050/706578 建议使用 ROWTERMINATOR = '0x0a' 如果 '\n' 或 '\r\n' 不适合你。这对我有用! (16认同)