让bcp.exe转义终止符

时间:2009-12-29 18:24:30

标签: sql-server-2000 export escaping bcp

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

例如,我的一个列是文本数据,包括标签和换行符。 BCP只是按原样导出它们,我试图导入它们的程序变得混乱,因为数据在行的中间结束和/或行包含额外的列,没有明显的原因。

这似乎是一个非常非常非常的基本函数,可以包含在数据导出器中,但the command-line options似乎都没有提到它。 (为什么它不会只是默认值超出我。)我错过了什么?

4 个答案:

答案 0 :(得分:8)

完全同意你的观点:逃避应该是一种选择。 “你不能拥有标签或换行符的数据”是我听过的最愚蠢的事情。

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

  1. 使用-r选项设置不同的行终止符。东西
    不太可能出现在您的数据中(#!#$#%#)。我想你可以使用多个
    字符,这样可以更容易。
  2. 在sed,一个功能强大的文本编辑器中打开您的数据文件,或者编写一个脚本 - 并将任何\ n和\ t字符替换为其转义的等价物(\\ n和\\ t)。最后用\ n替换你的行终止符,你应该很好。
  3. 我认为同样的事情应该适用于使用-t作为字段终结符
  4. 看看this article for more information

答案 1 :(得分:4)

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

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

找到解决方案here

答案 2 :(得分:-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

祝你好运

答案 3 :(得分:-7)

您不能拥有包含制表符和新行的数据,其中包含制表符和换行符分隔符。这没有道理。转义无效,因为选项卡是一个选项卡。我们不是在这里谈论c#字符串处理。

我要做的是使用|||/ndifferent terminators,或使用format file