【问题标题】:Sybase ASE 12.0 CSV Table ExportSybase ASE 12.0 CSV 表导出
【发布时间】:2011-03-01 17:45:56
【问题描述】:

我正在尝试将 Sybase ASE 12.0 中的视图/表导出到 CSV 文件中,但我在其中遇到了很多困难。

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

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

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

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

【问题讨论】:

    标签: csv sap-ase bcp export-to-csv


    【解决方案1】:

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

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

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

    【讨论】:

    • 不幸的是,用空格替换换行符确实会破坏这些字段的可读性。
    • 您可以用其他未使用的字符替换。导出/导入,然后将其他未使用的字符替换回换行符
    • 所以我们最终采纳了您最初的建议。不过我敢肯定有更好的方法。我们甚至尝试使用未使用的字符作为文本封装器,但程序不想玩得很好。谢谢。
    【解决方案2】:

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

    类似:

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

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

    【讨论】:

      【解决方案3】:

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

      bcp .... -f XXXX.fmt

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        相关资源
        最近更新 更多