bcp 抛出意外的 EOF 错误,除非文件有额外的 \n

bcp throwing unexpected EOF error unless the file has an extra \n

我正在通过 BCP 将制表符分隔的文本文件导入 SQL Server 2012。它的工作除了文件的最后一行,它没有被导入。这不是常见的意外 EOF 问题,即分隔符设置不正确或使用逗号分隔符的数据中存在逗号。字段分隔符明确设置为 \t,行分隔符明确设置为 \n。在 Notepad++ 中检查最后一行时,它正确包含数据和制表符。但是,它没有行尾定界符。相反,文件仅以最后一个制表符停止(该行的最后一个字段为空)。据我所知这是正常的。

奇怪的是,如果我在文件末尾添加行尾定界符,最后一行会正确导入。最后一行唯一不寻常的地方是第一个字段的数据在实际字符数据之前包含一个反引号。但是反引号没有用作分隔符,所以这似乎不太可能成为问题,尤其是当我添加 "extra" 行尾分隔符时确实导入了该行。

那么,分隔文本文件是否应该始终在数据末尾有一个行尾分隔符?还是这里发生了其他事情?

匿名BCP代码:

bcp DATABASENAME.dbo.tablename in "L:\directoryname\filename.txt" -c  -S servername -U username -P passwordtext -F 2 -t \t -r \n

正如@TT 指出的那样,您已经怀疑了这个问题。 一种解决方法是使用 PowerShell 来确保文件上有一个结束 CR/LF:

powershell "Get-Content -Path .\original.tsv | Set-Content -Path .\corrected.tsv;"

如果有的话,还是会的,不会再增加新的了。 缺少的会补上

然后修改 BCP 行以使用更正后的文件名作为输入,然后像往常一样自行清理。