执行INSERT INTO批量插入语句时报SQL command not properly ended错误如何解决?
SQL批量插入报错排查结果
你使用的INSERT ... VALUES (值组1), (值组2)批量插入语法仅适配MySQL、PostgreSQL、SQL Server 2008及以上版本,若你当前使用的是Oracle、低版本SQL Server、Access等数据库,该语法不被支持,就会触发SQL command not properly ended报错。
可直接使用的兼容解决方案
方案1:全数据库兼容的UNION ALL拼接写法
无需逐行执行单条插入,所有关系型数据库都支持该语法:
INSERT INTO L5_DIRECTORS (director_id, first_name, last_name) SELECT 1010, 'Rob', 'Minkoff' UNION ALL SELECT 1020, 'Bill', 'Condon' UNION ALL SELECT 1050, 'Josh', 'Cooley' UNION ALL SELECT 2010, 'brad', 'bird' UNION ALL SELECT 3020, 'lake', 'bell';
方案2:Oracle专属批量插入写法
如果确认用的是Oracle数据库,可使用原生的INSERT ALL语法,执行效率更高:
INSERT ALL INTO L5_DIRECTORS (director_id, first_name, last_name) VALUES (1010, 'Rob', 'Minkoff') INTO L5_DIRECTORS (director_id, first_name, last_name) VALUES (1020, 'Bill', 'Condon') INTO L5_DIRECTORS (director_id, first_name, last_name) VALUES (1050, 'Josh', 'Cooley') INTO L5_DIRECTORS (director_id, first_name, last_name) VALUES (2010, 'brad', 'bird') INTO L5_DIRECTORS (director_id, first_name, last_name) VALUES (3020, 'lake', 'bell') SELECT * FROM dual;
方案3:MySQL/PostgreSQL/SQL Server 2008+场景排查
如果用的是支持多值组插入的数据库仍报错,检查语句前后是否有多余的不可见字符、括号/分号是否写错,修正后原语法可以正常运行。
内容的提问来源于stack exchange,提问作者Jeni K
相关产品推荐
相关产品推荐

