可以在没有列列表的情况下使用LOAD TABLE吗?

时间:2015-08-03 10:50:30

标签: sybase-iq

我习惯使用bcp命令行工具使用Sybase ASE卸载和加载数据。这不需要您指定任何列名。

据我所知,Sybase IQ中的bcp等效于LOAD TABLE命令,但是如果不指定列名,我无法加载任何数据。

datafile.txt:
1,2,3,
1,2,3,

CREATE TABLE myTable (
   fa integer null,
   fb integer null,
   fc integer null
)

LOAD TABLE myTable
FROM 'datafile.txt'
QUOTES OFF 
ESCAPES OFF 

以上产生以下错误;

The LOAD statement's column count(0) must be between 1 and 0.  Check the LOAD statement's 'load-specification'

我看过一些没有列列表的LOAD TABLE命令的例子,但是我无法让它工作。是否只能使用二进制文件?我也试过没有运气就使用FORMAT BCP。

列名是必须的,这似乎很疯狂。

2 个答案:

答案 0 :(得分:1)

在IQ上,LOAD语句需要列列表。例如。来自15.3 documentation

  

LOAD TABLE命令必须至少包含一个需要从LOAD TABLE命令中指定的文件加载的列。否则,将报告错误并且不执行加载。

答案 1 :(得分:0)

我在IQ(或bcp for Sybase或sqlldr for Oracle)中使用perl包装器来表示'load table'。如果文件与表匹配,则不需要列列表:

#/usr/local/bin/perl

use DBIx::BulkUtil;

#...

my ($dbh,$dbu) = DBIx::BulkUtil->iq_connect(
  Server   => $server,
  Database => $db,
  User     => $user,
  Password => $pw,
);

$dbu->bcp_in('mytable', 'datafile.txt', {
  Delimiter => ",",
});