【问题标题】:BCP unexpected EOFBCP 意外 EOF
【发布时间】:2014-01-02 10:24:53
【问题描述】:

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

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

命令是: BCP tblBulkCopyTest in d:\bc_file.txt -F3 -L3 -c -t, -S(local) -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 命令将如何忽略这些行吗?

【问题讨论】:

    标签: sql-server bcp


    【解决方案1】:

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

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

    2) 在那里插入所有行。

    3) 使用 WHERE 参数删除不必要的无格式行(例如,您的示例中的“测试”)。甚至删除所有不必要的行(您需要加载的行除外)以简化第 5 点。

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

    5) 下载这个新文件。

    这并不完全是你想要的,但如果你编写相应的存储过程可能会有所帮助,它可以自动完成所有这些事情。

    【讨论】:

    • 感谢您的评论。我没有想过这个解决方案。我会按照你说的方式实现我的批量复制..非常感谢!
    猜你喜欢
    • 2014-12-07
    • 2015-03-05
    • 2022-11-11
    • 2019-02-17
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多