11

我需要使用 SQL Server 2000 的 BCP 实用程序导出一些数据。有时我的数据包含我需要用作列和行终止符的字符,例如 \t 和 \n。如何让 BCP 在输出数据时转义它用作终止符的字符,以便我可以在另一个程序中实际导入数据?

例如,我的专栏之一是文本数据,包括制表符和换行符。BCP 只是按原样导出它们,而我试图导入它们的程序会感到困惑,因为数据在一行的中间结束和/或一行包含额外的列,没有明显的原因。

这似乎是包含在数据导出器中的一个非常、非常、非常基本的功能,但似乎没有一个命令行选项提及它。(为什么它不仅仅是默认值超出了我的范围。)我错过了什么吗?

4

4 回答 4

10

完全同意你的看法:逃避应该是一种选择。“你不能用制表符或换行符获取数据”是我听过的最愚蠢的事情。

这是一个可能的解决方案:

  1. 使用 -r 选项设置不同的行终止符。
    您的数据中不太可能存在某些内容 (#!#$#%#) 。我认为您可以使用多个
    字符,这样会更容易。
  2. 在 sed(一个功能强大的文本编辑器)中打开您的数据文件,或者编写一个脚本 - 并将任何 \n 和 \t 字符替换为它们的转义等效项(\\n 和 \\t)。最后用 \n 替换你的行终止符,你应该很好。
  3. 我认为同样的事情应该适用于将 -t 用于字段终止符

看看这篇文章了解更多信息

于 2013-05-26T16:10:14.017 回答
5

如果将它们放在双引号之间,则可以使用由多个字符组成的分隔符:

bcp MY_TABLE out C:\MY_FILE.txt -S SERVER_IP -d DB_NAME -U MY_USER -P MY_PASSWORD -w -t "&#)^@" -r ">~+!"

在这里找到了解决方案。

于 2014-09-23T11:05:33.047 回答
-2

我也有同样的问题,找了很久才找到解决办法。我从 BCP 大师那里找到了这个,听起来很合理。也许您也想尝试一下。

可能的解决方案:http://groups.google.co.uk/group/microsoft.public.sqlserver.tools/tree/browse_frm/thread/f1ee12cba3079189/ef9094123901fe26?rnum=1&q=lindawie+format+file&_done=%2Fgroup%2Fmicrosoft。 public.sqlserver.tools%2Fbrowse_frm%2Fthread%2Ff1ee12cba3079189%2Fef9094123901fe26%3Ftvc%3D1%26q%3Dlindawie%2Bformat%2Bfile%26#doc_fa5708ca51d967a6

格式文件详细信息和设计:http: //msdn.microsoft.com/en-us/library/aa173859%28SQL.80%29.aspx

一般来说,我可以建议这些链接让您了解 BCP 问题和解决方案: http ://groups.google.co.uk/groups?q=lindawie+format+file

最好的祝福

于 2010-10-15T10:22:53.313 回答
-9

您不能拥有包含制表符和换行符以及制表符和换行符分隔符的数据。这没有道理。转义无济于事,因为选项卡就是选项卡。我们不是在这里谈论 c# 字符串处理。

我要做的是使用不同的终止符,例如|and ||/n,或者使用格式文件

于 2009-12-29T19:23:10.730 回答