使用 BCP 提示文件存储类型将数据写入文本文件
Writing data to text file using BCP prompts for file storage type
我正在使用 bcp 工具和以下命令将数据从 SQL 复制到文本文件:
bcp.exe "exec <StoredProcedure>" queryout "temp.txt" -T -r\n -c
此命令 运行 在测试环境中符合预期,并且 creates/updates 需要文件而无需其他提示。
但是当它在客户端环境中是 运行 时,bcp 会额外提示字段长度、前缀和字段终止符 - 所以当命令是来自 SQL 代理作业的 运行 时,它会卡住在无限等待中。
知道为什么会这样吗?
基于bcp documentation,当使用-c参数时-它不应该提示输入类型等,应该使用char作为存储类型,没有前缀,和\t作为字段终止符。
不需要指定记录分隔符,所以去掉-r\n
。 -c
选项将对列使用制表符,对记录使用回车 return 和换行(与指定 -t\t -r\r\n
相同)。否则就像其他张贴者所说的那样,确保首先指定 -c
旁注:我建议您使用 -f"yourpathandfilename.fmt"
输出格式文件作为一种实践(而不是解决方案)。在客户端,您也可以将 -f
参数与 import 一起使用。这样,如果源和目标之间存在差异,您可以手动调整格式文件。
我猜想在您的测试环境和客户端环境实际执行命令之间的某个地方,“/n”正在变成一个真正的换行符。尝试将“-c”放在“-r”之前,看看会发生什么。
我正在使用 bcp 工具和以下命令将数据从 SQL 复制到文本文件:
bcp.exe "exec <StoredProcedure>" queryout "temp.txt" -T -r\n -c
此命令 运行 在测试环境中符合预期,并且 creates/updates 需要文件而无需其他提示。
但是当它在客户端环境中是 运行 时,bcp 会额外提示字段长度、前缀和字段终止符 - 所以当命令是来自 SQL 代理作业的 运行 时,它会卡住在无限等待中。
知道为什么会这样吗?
基于bcp documentation,当使用-c参数时-它不应该提示输入类型等,应该使用char作为存储类型,没有前缀,和\t作为字段终止符。
不需要指定记录分隔符,所以去掉-r\n
。 -c
选项将对列使用制表符,对记录使用回车 return 和换行(与指定 -t\t -r\r\n
相同)。否则就像其他张贴者所说的那样,确保首先指定 -c
旁注:我建议您使用 -f"yourpathandfilename.fmt"
输出格式文件作为一种实践(而不是解决方案)。在客户端,您也可以将 -f
参数与 import 一起使用。这样,如果源和目标之间存在差异,您可以手动调整格式文件。
我猜想在您的测试环境和客户端环境实际执行命令之间的某个地方,“/n”正在变成一个真正的换行符。尝试将“-c”放在“-r”之前,看看会发生什么。