【问题标题】:Writing data to text file using BCP prompts for file storage type使用 BCP 提示文件存储类型将数据写入文本文件
【发布时间】:2015-11-25 19:45:05
【问题描述】:

我正在使用 bcp 工具通过以下命令将数据从 SQL 复制到文本文件:

    bcp.exe "exec <StoredProcedure>" queryout "temp.txt" -T -r\n -c

此命令在测试环境中按预期运行,并创建/更新所需文件而无需额外提示。

但是当它在客户端环境中运行时,bcp 还会提示输入字段长度、前缀和字段终止符——因此当从 SQL 代理作业运行命令时,它会陷入无限等待。

任何想法为什么会发生这种情况?

基于bcp documentation,当使用-c参数时,不提示输入类型等,应使用char作为存储类型,不带前缀,\t作为字段终止符。

【问题讨论】:

  • 我猜在您的测试环境和客户端环境实际执行命令之间的某个地方,“/n”不知何故变成了一个真正的换行符。尝试将“-c”放在“-r”之前,看看会发生什么。
  • -r\n 是多余的 -c-t\t -r\r\n 的含义相同,因此请使用其中一个或另一个
  • @RBarryYoung,你的猜测结果证明是正确的,它解决了这个问题。谢谢。如果您将评论移至答案会很好,所以我可以接受。
  • @Jasper Schellingerhout,真的是多余的,谢谢提示。

标签: sql-server sql-server-2008-r2 bcp


【解决方案1】:

不需要指定记录分隔符,所以去掉-r\n-c 选项将对列使用制表符,对记录使用回车和换行(与指定 -t\t -r\r\n 相同)。否则,就像其他海报所述,请确保首先指定 -c

旁注:我建议您将使用-f"yourpathandfilename.fmt" 输出格式文件作为一种实践(而非解决方案)。在客户端,您也可以将 -f 参数与导入一起使用。这样,如果源和目标之间存在差异,您可以手动调整格式文件。

【讨论】:

    【解决方案2】:

    我猜你的测试环境和客户端环境实际执行命令之间的某个地方,“/n”正在变成一个真正的换行符。尝试将“-c”放在“-r”之前,看看会发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多