让 bcp.exe 逃脱终结者

问题描述 投票:0回答:5

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

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

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

sql-server-2000 export escaping bcp
5个回答
10
投票

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

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

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

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


5
投票

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

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

在这里找到解决方案.


0
投票

如果您的表在两边都相同,您可以使用本机格式,它将以处理控制字符的二进制数据库格式导出。只需添加

-n
开关而不是
-c
-w
:

bcp MyTable out C:\temp\MyTable.tsv -S SERVER -d Database -U USER -n


-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

致以诚挚的问候


-9
投票

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

我会做的是使用不同的终止符例如

|
||/n
,或者使用格式文件

© www.soinside.com 2019 - 2024. All rights reserved.