是否可以在sybase DB的单列中上传','分隔的文件

问题描述 投票:0回答:1

我有分隔文本文件。

如何将此文本文件上传到 sybase 表的单列中。

我尝试了这个但出现错误

LOAD TABLE VOD_K
(telecastKey)
FROM
'C://Users//1336856//Documents//VOD.txt'
STRIP OFF
ESCAPES OFF
QUOTES OFF
ROW DELIMITED BY ','

错误:行分隔符必须与所有列分隔符不同。

这是我的文本文件:

bulkinsert sqlanywhere bulk-load sybase-asa
1个回答
2
投票

假设这是 Sybase IQ(或 SQLAnywhere)...

  • 默认的列分隔符是逗号 (,)
  • 默认的列分隔符可以通过
    DELIMITED BY 'some_character'
    子句设置('some_character'也可以是十六进制代码)
  • 选择一个没有出现在数据中的字符并使用 is 作为列分隔符(是的,与评论中提到的 underscore_d 相同)

例如,假设源数据文件中不存在制表符(\x09):

LOAD TABLE VOD_K
(telecastKey)
FROM
'C://Users//1336856//Documents//VOD.txt'
STRIP OFF
ESCAPES OFF
QUOTES OFF
DELIMITED BY '\x09'       <<<<==== set column delimiter to a tab
ROW DELIMITED BY ','

针对新错误(无效尺寸太大)的评论;这可能是由于数据库引擎无法正确读取 '\x09' 字符串所致),我猜测这可能与 Windows 上运行的 OP 有关(可能是字符集问题?)。

注意:我通常不使用 IQ 或 SQLAnywhere 数据库,但当我使用时,是在 unix/linux 上;所以除了尝试一些不同的事情之外,不能 100% 确定这个问题......

以下内容针对在 Linux 主机上运行的 SQL Anywhere 数据库(版本 17.0.7.3382)运行:

# Sample data file:

$ cd /tmp
$ echo "123456,234567,345678,456789,567890" > data.txt
$ cat data.txt
123456,234567,345678,456789,567890

# the following was run via a isql session against the SQL Anywhere db:

create table VOD_K
(telecastKey int not null)
go

LOAD TABLE VOD_K
(telecastKey)
FROM
'/tmp/data.txt'
STRIP OFF
ESCAPES OFF
QUOTES OFF
DELIMITED BY '\x09'
ROW DELIMITED BY ','
go
(5 rows affected)

select * from VOD_K
go

 telecastKey
 -----------
      123456
      234567
      345678
      456789
      567890

请记住,

DELIMITED BY '\x09'
子句是一个示例,我们只需要选择一个字符...ANY字符...数据文件中不存在;如果数据文件仅包含数字(0-9)和逗号(,),请尝试使用其他字符作为分隔符,例如:

LOAD TABLE VOD_K
(telecastKey)
FROM
'/tmp/data.txt'
STRIP OFF
ESCAPES OFF
QUOTES OFF
DELIMITED BY 'X'       -- use single character 'X'
ROW DELIMITED BY ','
go
(5 rows affected)

select * from VOD_K
go

 telecastKey
 -----------
      123456
      234567
      345678
      456789
      567890
© www.soinside.com 2019 - 2024. All rights reserved.