让bcp.exe转义终止符

Kev*_*Kev 10 export bcp escaping sql-server-2000

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

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

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

Mik*_*rko 10

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

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

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

有关更多信息,请查看此文章.


Cos*_*min 5

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

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

这里找到了解决方案。


gbn*_*gbn -9

您不能拥有包含制表符和换行符以及制表符和换行符分隔符的数据。这个不成立。转义没有帮助,因为选项卡就是选项卡。我们这里讨论的不是 C# 字符串处理。

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

  • 它实际上确实有意义——例如,在 PostgreSQL 中使用 COPY FROM,它将把序列“\n”转回文本列中的实际换行符。不幸的是我无法在 PostgreSQL 中指定行分隔符。 (2认同)
  • 好吧,它也必须转义转义字符。这就是转义字符的工作原理。包含换行符、反斜杠和制表符的文本字段将显示为“\n\\\t”,并在导入时变回换行符、反斜杠和制表符。能否提供一下狡猾的越狱参考?我在 http://www.postgresql.org/docs/8.4/static/sql-copy.html 上没有看到任何内容。当然,SQL Server 是可预测的,但不是我(或 pgsql)正在寻找的输出。 (2认同)