2011-03-01 188 views
1

我想要做的是将Sybase ASE 12.0中的视图/表导出到CSV文件中,但我遇到了很多困难。Sybase ASE 12.0 CSV表导出

我们想将它导入IDEA或MS-Access。这些程序运行的方式是使用文本字段封装字符和字段分隔符字符,以及作为记录分隔符的新行(不能修改此字符)。

那么,使用bcp导出它最终是没有结果的内置选项。它不允许你定义一个文本字段封装字符(据我所知)。所以我们试图创建另一个视图,从另一个视图/表中读取并连接其中有新行的字段(text字段),但是,您可能不会这样做,但不会损失某些精度,因为它会强制该字段变为varchar 8000字符/字节,其中我们使用的最大字段是16000(所以肯定有一些截断)。

因此,我们决定在新视图中创建具有文本字段分隔符的列。但是,这使得我们的列数在320 - 70以上,超过了ASE 12.0中的250列限制。

bcp只能在现有的表和视图上工作,那么我们可以做些什么来导出这些数据呢?我们对任何事情都很开放。

回答

1

如果导致出现问题,你能不能只是做它唯一的新行字符一个替代

create new view as 
select field1, field2, replace(text_field_with_char, 'new line char,' ' ') 
from old_view 

你可能要考虑出口为2个文件,导入到你的目标为2个表,然后将它们结合起来再次在目标。如果两个文件都有一个主键,这很简单。

+0

用空格替换新行字符确实会破坏这些字段的可读性f或不幸的是将要使用它的人。 – Nitrodist 2011-03-01 18:20:01

+0

你可以用一个不用的字符替换。导出/导入,然后将其他未使用的字符替换回换行符 – Karl 2011-03-01 20:54:26

+0

所以我们结束了最初的建议。我确定有更好的方法。我们甚至试图使用未使用的字符作为文本封装器,但程序不想玩得很好。谢谢。 – Nitrodist 2011-03-07 21:37:12

0

这听起来像bcp的权利,但通过awk或perl处理输出。 但是,你有这些东西,知道吗?这对你来说可能是一点点的开销。 如果你在Windows上,你可以免费得到Active Perl,并且它可以很快。

类似:

perl的-F,-lane“打印 “\” $ F [0] \”,$ F [1],\ “$ F [2] \”,$ F [3 ] \ n“;' bcp-output-file

那是怎么回事? $ F是一个字段数组。文本那些你用\”

0

您可以使用BCP格式文件这一点。

BCP .... -f XXXX.fmt

BCP也可以交互地产生这种格式的文件,如果你不包围't' 任何-c -n -f标志,然后你可以保存格式文件并对它进行实验,编辑它并运行BCP。 为了在安全的时候输出和调试,使用-F -L标志,比如“ - F 1 -L 10“ - 这只能得到前10行