我习惯使用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。
列名是必须的,这似乎很疯狂。
答案 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 => ",",
});