跳过bcp格式文件Sybase中的主机文件列

时间:2015-08-05 09:14:05

标签: sybase sybase-ase sqlbulkcopy bcp bulk

我有一个像这样的csv texte文件:

SicID;PorID;FarId;Company;DecadeId;SocName;FarName
A1;A2;A3;A4;A5;A6;A7
B1;B2;B3;B4;B5;B6;B7
C1;C2;C3;C4;C5;C6;C7

我想使用Bcp Sybase在my_table中导入此文件,但只能使用SicID,PorID和SocName。所以我使用这个bcp格式文件:

10.0
8
1   SYBCHAR 0   2   ";" 1   SicId
2   SYBCHAR 0   2   ";" 2   PorId
3   SYBCHAR 0   0   ""  0   FundId
4   SYBCHAR 0   0   ""  0   Company
5   SYBCHAR 0   0   ""  0   DomicileId
6   SYBCHAR 0   2   ";" 3   SocName
7   SYBCHAR 0   0   ""  0   FundName
8   SYBCHAR 0   10  "\r\n" 0    end

不幸的是,当我导入它时,my_table没有好的数据。它不会跳过文本文件的3,4,5主机列,并且用其他不可理解的列填充my_table。

是否有解决方案可以跳过主机列来填充我的表格?

MY_TABLE

SicID;PorID;SocName
A1;A2;A6
B1;B2;B6
C1;C2;C6

2 个答案:

答案 0 :(得分:2)

您遇到的问题是您要省略的列上没有终止符,请检查以下图像(我是从here 获得的):

enter image description here

基本上,如果要省略源文件中的列,只需:

  1. 用作服务器列顺序= 0
  2. 必须指定终止符!
  3. 源文件的长度也很重要。
  4. 服务器列名称仅提供信息
  5. 例如,使用您在问题中提供的示例数据,您的.fmt文件应如下所示:

    10.0
    8
    1   SYBCHAR 0   2   ";"    1   SicId
    2   SYBCHAR 0   2   ";"    2   PorId
    3   SYBCHAR 0   2   ";"    0   FarId
    4   SYBCHAR 0   2   ";"    0   Company
    5   SYBCHAR 0   2   ";"    0   DecadeId
    6   SYBCHAR 0   2   ";"    3   SocName
    7   SYBCHAR 0   2   ";"    0   FarName
    8   SYBCHAR 0   10  "\r\n" 0   end
    

答案 1 :(得分:-1)

ASE格式文件不能用于在SQL Server中省略reorder or skip列。在这种情况下,您应该bcp到临时表,然后在生产表中选择行。

或者,您可以创建一个脚本(python,shell等)来预处理文件以删除不需要的列。