BCP出乎意料的EOF

时间:2014-01-02 10:24:54

标签: sql-server bcp

我尝试从一个文件到sqlserver 2008中的表进行批量复制。它只是我要复制的文件的一部分(在BCP命令示例中,它只是我将复制的第3行)。

有时我会收到“遇到意外的EOF”错误消息。

命令是: BCP tblBulkCopyTest在d:\ bc_file.txt -F3 -L3 -c -t,-S(本地)-Utest -Ptest

当文件如下所示时,副本工作正常(行号3插入到我的表中):

44261233,207,0,0,2168  
44261234,207,0,0,2570  
44261235,207,0,0,2572  

当文件如下所示时,我收到“遇到意外的EOF”错误信息:
    测试
    44261233,207,0,0,2168
    44261234,207,0,0,2570
    44261235,207,0,0,2572

似乎当文件以不正确的格式启动时,BCP命令失败,即使它不是我要复制的行(在bcp命令中我指定了行号3)。

当文件如下所示时,副本可以正常工作:

44261233,207,0,0,2168  
44261234,207,0,0,2570  
44261235,207,0,0,2572 
Test  

因此,只有当文件在我想复制的行之前有一些不正确的数据时,才会收到错误。

有关BCP命令如何忽略这些行的任何建议,不是问题吗?

1 个答案:

答案 0 :(得分:1)

我每天解决这类错误的方式:

1)创建一个包含单列tblRawBulk(RawRow varchar(1000))的表。

2)在那里插入所有行。

3)使用WHERE参数删除不必要的未格式化的行(例如,示例中的“test”)。或者甚至删除所有不必要的行(除了需要加载的行),以简化第5点。

4)将此表与BCP上传到某个工作文件夹。

5)下载这个新文件。

这并不是你想要的,但是如果你要编写相应的存储过程可能会有所帮助,它可以自动执行所有这些操作。