我正在使用bcp
实用程序将数据导入系统Sybase
上的数据库Solaris
由于 bcp 文件是由另一个 xml 解析脚本生成的,因此我无法控制它以使其按我想要的顺序生成字段。现在 bcp 文件中字段的顺序与数据库表中的顺序有些不同。
我想使用 bcp 工具的格式文件来控制加载到数据库中的字段的顺序,所以我有如下示例 bcp 文件并相应地构造了一个格式文件:
bcp 文件:
603289|Aug 20 2011 12:00AM|YYY aaa OVD|KLYYP8
603284|Aug 22 2011 12:00AM|XXX bbb OVD|KLPK06
格式文件:
10.0
4
1 SYBCHAR 0 12 "|" 3 ver
2 SYBCHAR 0 26 "|" 2 first_dt
3 SYBCHAR 0 60 "|" 4 name1
4 SYBCHAR 0 10 "|" 1 name2
尽管我遇到以下错误:
$bcp my_db..my_tbl in test.bcp -e error -f format.fmt -r\\n -S Sever -U user -P pw
Starting copy...
CSLIB Message: - L0/O0/S0/N24/1/0:
cs_convert: cslib user api layer: common library error: The conversion/operation was stopped due to a syntax error in the source field.
Unexpected EOF encountered in BCP data-file.
bcp copy in partially failed
1 rows copied.
我怀疑错误的原因是 bcp 实用程序无法识别作为 '\n' 字符的行分隔符(我曾经od -c test.bcp
检查过这个),尽管-r\\n
命令中的选项似乎不起作用,它应该指定行分隔符为 '\n' 字符。
有人有线索吗?
编辑:
我对格式文件进行了更改,现在可以正常工作,我将最后一个字段的字段分隔符从“|”更改为 到 '\n' 如下:
新格式文件:
10.0
4
1 SYBCHAR 0 12 "|" 3 ver
2 SYBCHAR 0 26 "|" 2 first_dt
3 SYBCHAR 0 60 "|" 4 name1
4 SYBCHAR 0 10 "\n" 1 name2
正如迈克尔在评论中提到的,使用格式文件很棘手。使用原始格式文件时,我尝试添加“|” 在每条记录的末尾,尽管文件未正确处理。
现在可以正确处理文件,尽管我不确定 bcp 实用程序将什么用作行分隔符