1

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

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

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

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

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

4

3 回答 3

1

如果它只是导致问题的新行字符,您不仅可以进行替换

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

您可能必须考虑导出为 2 个文件,作为 2 个表导入目标,然后在目标中再次组合它们。如果两个文件都有一个主键,这很简单。

于 2011-03-01T18:11:48.783 回答
0

这听起来像 bcp 的权利,但通过 awk 或 perl 处理输出。但这些是你拥有和知道的吗?这对你来说可能有点开销。如果您使用的是 Windows,您可以免费获得 Active Perl,而且速度可能很快。

就像是:

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

怎么样?$F 是一个字段数组。用 \" 包围的文本

于 2011-03-08T22:26:55.940 回答
0

您可以为此使用 BCP 格式文件。

bcp .... -f XXXX.fmt

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

于 2015-03-06T10:41:27.213 回答