Sybase ASE 12.0 CSV表格导出

Sybase ASE 12.0 CSV表格导出,csv,sap-ase,bcp,export-to-csv,Csv,Sap Ase,Bcp,Export To Csv,我试图做的是将一个视图/表从Sybase ASE 12.0导出到一个CSV文件中,但是我遇到了很多困难 我们要将其导入到或MS Access中。这些程序的操作方式是使用文本字段封装字符和字段分隔符字符,以及作为记录分隔符的新行(无法修改此项) 好吧,使用bcp导出它,其内置选项最终是徒劳的。它不允许您定义文本字段封装字符(据我所知)。因此,我们尝试创建另一个视图,该视图从另一个视图/表读取,该视图/表连接有新行的字段(textfields),但是,如果这样做,可能会丢失一些精度,因为它会将字段强

我试图做的是将一个视图/表从Sybase ASE 12.0导出到一个CSV文件中,但是我遇到了很多困难

我们要将其导入到或MS Access中。这些程序的操作方式是使用文本字段封装字符和字段分隔符字符,以及作为记录分隔符的新行(无法修改此项)

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

因此,我们决定在新视图中创建具有文本字段分隔符的列。然而,这使得视图的列数为320—比ASE 12.0中的250列限制多70


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

如果只是新行字符导致了问题,您不能只进行替换吗

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

您可能需要考虑导出为2个文件,导入到目标中作为2个表,然后再将它们组合到目标中。如果两个文件都有主键,那么这是简单的。

< p>如果它只是引起问题的新线字符,您不能只做一个替换< /p>
create new view as
select field1, field2, replace(text_field_with_char, 'new line char,' ' ')
from old_view

您可能需要考虑导出为2个文件,将目标导入为2个表,然后再将它们组合到目标中。如果两个文件都有主键,那么这是简单的。

< P>听起来像BCP是正确的,但是通过AWK或Perl处理输出。 但这些是你所拥有和知道的吗?这对你来说可能有点开销。 如果您使用的是Windows,那么就可以免费获得活动Perl,而且速度很快

比如:

perl-F,-lane“打印”\“$F[0]\”,$F[1],\“$F[2]\”,$F[3]\n“;”bcp输出文件


这是怎么回事?$F是一个字段数组。您用\“

包围的文本字段听起来像是bcp的右边,但通过awk或perl处理输出。 但这些是你所拥有和知道的吗?这对你来说可能有点开销。 如果您使用的是Windows,那么就可以免费获得活动Perl,而且速度很快

比如:

perl-F,-lane“打印”\“$F[0]\”,$F[1],\“$F[2]\”,$F[3]\n“;”bcp输出文件


这是怎么回事?$F是一个字段数组。您用\“

包围的文本字段可以使用BCP格式的文件进行此操作

bcp…-f XXXX.fmt

如果您不声明,BCP也可以以交互方式生成此格式的文件 任何-c-n-f标志。然后您可以保存格式文件并对其进行实验,编辑它并运行BCP。
为了在导出和调试时保证时间安全,请使用-F-L标志,如“-F 1-L 10”--这只会获取前10行。

您可以使用BCP格式文件进行此操作

bcp…-f XXXX.fmt

如果您不声明,BCP也可以以交互方式生成此格式的文件 任何-c-n-f标志。然后您可以保存格式文件并对其进行实验,编辑它并运行BCP。
为了在导出和调试时保证时间安全,请使用-F-L标志,如“-F 1-L 10”--这只得到前10行。

很遗憾,用空格替换新行字符确实会破坏这些字段对于将要使用它的人的可读性。您可以替换为其他未使用的字符。导出/导入,然后将其他未使用的字符替换回换行符,因此我们最终使用了您的换行符初步建议。不过我相信有更好的方法。我们甚至尝试使用未使用的字符作为文本封装器,但程序不想玩得很好。谢谢。用空格替换新行字符确实会破坏这些字段对使用它的人的可读性。不幸的是,你可以用其他字符替换ise未使用的字符。导出/导入,然后将其他未使用的字符替换回换行符,因此我们最终采用了您最初的建议。但我相信有更好的方法。我们甚至尝试将未使用的字符用作文本封装器,但程序不想玩得很好。谢谢。