Sql server 大容量插入失败,行终止符位于最后一行

Sql server 大容量插入失败,行终止符位于最后一行,sql-server,csv,bulkinsert,Sql Server,Csv,Bulkinsert,我正在将使用cygwin shell命令编译的CSV导入MS SQL 2014,使用: BULK INSERT import from 'D:\tail.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\r', FIRSTROW = 1) GO 我已确认每行包含一个\r\n。如果我在最后一行保留CR/LF,则批量导入将失败,消息为4832: 大容量加载:在数据文件中遇到意外的文件结尾 如果在最后一个数据行的末尾结束文件,则大容量导入成功 对

我正在将使用cygwin shell命令编译的CSV导入MS SQL 2014,使用:

BULK INSERT import
from 'D:\tail.csv'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\r', FIRSTROW = 1)
GO
我已确认每行包含一个\r\n。如果我在最后一行保留CR/LF,则批量导入将失败,消息为4832:

大容量加载:在数据文件中遇到意外的文件结尾

如果在最后一个数据行的末尾结束文件,则大容量导入成功

对于非常大的CSV,解决此问题的一个困难方法是查找行数,并为大容量插入使用LASTROW设置。是否有更优雅的方式让MS SQL知道,是的,最后一行已终止,而不是抱怨它或失败?

使用以下方法:

BULK INSERT import
from 'D:\tail.csv'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a', FIRSTROW = 1)
GO

“最后一行”是包含数据的实际行吗?或者它是一个带有回车符/换行符的空行?您是否只尝试了
\n
?当最后一行的数据以CR/LF结尾时,文件失败,但当最后一行的数据没有CR/LF,只是EOF时,文件成功@AaronBertrand:是的,导入与行终止符='\n'一起工作!虽然我不明白为什么:我在调查这件事时,经历了\n和/或\r的每一次迭代…@AaronBertrand:领取你的奖品,这样我就可以标记出答案!可能需要一个链接来解释为什么\r可以工作到最后一行,但在这种情况下失败,\n没有失败?请不要将此作为答案提交,因为我不知道为什么最后一行会丢失
\r
。可能更好的修复方法是确保创建此文件的任何应用程序都将一致的行尾(通常我们希望CR+LF=>
\r\n
)应用于文件中的每一行。