除非文件有额外的\ n

时间:2017-08-15 17:36:08

标签: sql sql-server sql-server-2012 bcp

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

奇怪的是,如果我在文件末尾添加行尾分隔符,则最后一行正确导入。关于最后一行的唯一不寻常的事情是第一个字段的数据在实际字符数据之前包含反引号。但是反引号不会被用作分隔符,所以这似乎不太可能成为问题,特别是当我添加一个“额外的”行尾分隔符时,该行会导入。

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

匿名BCP代码:

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

1 个答案:

答案 0 :(得分:2)

正如@TT所说,你已经解决了这个问题。 一个修复可能是使用PowerShell来确保文件上有一个结束CR / LF:

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

如果有,它仍将存在,并且不会添加新的。 如果缺少,则会添加。

然后修改您的BCP行以使用更正的输入文件名,并照常清理。