如何通过SQL命令将CSV数据导入DB2表?原MariaDB脚本已实现
DB2通过SQL命令导入CSV数据的正确方法
针对你遇到的SQL0104错误,问题出在原脚本使用了不正确的FROM EXTERNAL语法,DB2并不支持这种直接在SELECT中引用外部文件的写法。以下提供两种可在DBeaver等SQL客户端中执行的纯SQL解决方案:
方法一:使用ADMIN_CMD存储过程执行LOAD(推荐)
借助DB2内置的SYSPROC.ADMIN_CMD存储过程,你可以用SQL语句调用LOAD命令,实现和MariaDB LOAD DATA类似的效果:
CALL SYSPROC.ADMIN_CMD( 'LOAD FROM ''Driver:/DBCsvFiles/my_table.csv'' OF DEL MODIFIED BY COLDEL, CHARDEL''"'' SKIPCOUNT 1 INSERT INTO my_database_name.my_table' );
参数说明:
OF DEL:声明文件为分隔符格式COLDEL,:设置字段分隔符为逗号CHARDEL'":设置字段包围符为双引号SKIPCOUNT 1:跳过第一行表头INSERT INTO:指定目标表
方法二:创建外部表后插入数据
如果需要重复使用该CSV数据源,可先创建外部表映射文件,再插入数据:
-- 1. 创建外部表(字段需与目标表完全匹配) CREATE EXTERNAL TABLE ext_my_table ( col1 VARCHAR(50), col2 INT, col3 DATE -- 按目标表结构补充所有字段 ) USING ( LOCATION 'Driver:/DBCsvFiles/my_table.csv' DELIMITER ',' ENCLOSED BY '"' SKIPROWS 1 REMOTESOURCE 'FILE' -- 本地文件用FILE,远程客户端文件用CLIENT ); -- 2. 将外部表数据插入目标表 INSERT INTO my_database_name.my_table SELECT * FROM ext_my_table; -- 3. 可选:不再使用时删除外部表 DROP TABLE ext_my_table;
关键注意事项
- 文件路径:如果是远程连接DB2服务器,路径是服务器端的文件路径;若要使用客户端本地文件,需在
USING子句中设置REMOTESOURCE CLIENT(方法二),或在LOAD命令中添加CLIENT选项(方法一) - 权限:确保DB2执行用户对CSV文件所在目录有读取权限
- 字段匹配:外部表或LOAD命令的字段顺序、类型必须与目标表完全一致,否则会导致插入失败
内容的提问来源于stack exchange,提问作者L. Grunn
相关产品推荐
相关产品推荐

