Firebird iSQL导出CSV出现记录间空行及CONCATENATION字样问题
问题原因
你的导出异常是两个配置冲突导致的:
- isql默认开启了拼接字符串提示,字段拼接输出时会自动插入
CONCATENATION标记和额外换行 - isql默认开启分页输出,每页结束会插入多空行,同时你混用了
OUTPUT自带的分隔配置和手动字段拼接逻辑,造成格式重复处理
解决方案
方案1(推荐):使用OUTPUT自带分隔能力,无需手动拼接字段
直接通过OUTPUT参数指定分隔规则,避免手动拼接的异常,SQL脚本修改为:
-- 关闭多余输出配置 SET HEADING OFF; SET PAGESIZE 0; SET CONCATENATION OFF; SET ECHO OFF; -- 配置输出规则,分隔符指定为你需要的分号 OUTPUT C:\SQL_Scripts\AddrBkExtract.csv FORMAT ASCII DELIMITED BY ';' QUOTE '"'; -- 直接查询所需字段即可 SELECT ID, "NAME", ADDRESS1, ADDRESS2, ADDRESS3, POSTCODE FROM ADDRESSBOOK; -- 关闭输出流 OUTPUT;
方案2:保留手动拼接字段的写法
如果你需要自定义字段拼接逻辑,关闭OUTPUT的分隔配置即可,SQL脚本修改为:
SET HEADING OFF; SET PAGESIZE 0; SET CONCATENATION OFF; SET ECHO OFF; OUTPUT C:\SQL_Scripts\AddrBkExtract.csv FORMAT ASCII; -- 用COALESCE处理空字段,避免单个字段为NULL导致整行结果为NULL SELECT a.ID || ';' || a."NAME" || ';' || COALESCE(a.ADDRESS1, '') || ';' || COALESCE(a.ADDRESS2, '') || ';' || COALESCE(a.ADDRESS3, '') || ';' || COALESCE(a.POSTCODE, '') FROM ADDRESSBOOK a; OUTPUT;
批处理调用优化
调用isql时添加-b批处理模式参数,可以进一步过滤多余的交互输出,示例:isql -u 你的用户名 -p 你的密码 数据库连接地址 -i 你的SQL脚本文件路径 -b
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

