求助:从SSMS导出CSV时结果值出现额外双引号问题
解决SSMS导出CSV时出现重复双引号的问题
我来帮你梳理下问题的根源和几个可行的解决方向:
问题原因
你遇到的三重引号("""012345678""")是因为双重处理双引号导致的:
- 你在SQL里用
CONCAT('"', ..., '"')手动给值加了双引号; - SSMS导出CSV时,默认会检测字段值里的特殊字符(包括双引号),自动用双引号包裹整个值,并且把值内部的双引号转义成两个双引号(CSV格式的标准转义规则);
- 两者叠加后,原本手动加的
"012345678"就被SSMS处理成了"""012345678"""(外层是SSMS自动加的包裹引号,内部的"被转义成"")。
解决办法
方法1:让SSMS自动处理引号(推荐)
放弃手动在SQL里添加引号,交给SSMS导出工具来统一处理,这样更符合CSV标准:
- 修改你的SQL脚本,去掉手动加引号的逻辑,直接查询原始值:
(如果需要字段名带双引号,直接用双引号包裹即可)SELECT ISNULL('012345678','') AS "employee_id" FROM employees - 执行查询后,用SSMS的导出向导导出CSV:
- 选择CSV格式后,进入“指定文本限定符”步骤,把文本限定符设置为
"(双引号); - 后续步骤保持默认即可。
这样SSMS会自动给每个字段值和字段名加上双引号,并且自动处理值内部的特殊字符转义,不会出现重复引号的问题。
- 选择CSV格式后,进入“指定文本限定符”步骤,把文本限定符设置为
方法2:手动控制引号,关闭SSMS的自动文本限定
如果你必须手动在SQL里添加引号,可以让SSMS不要额外添加包裹引号:
- 调整SQL逻辑里的字段名写法(
"是HTML实体,SQL不会解析它,要换成直接的双引号):SELECT CONCAT('"',ISNULL('012345678',''),'"') AS '"employee_id"' FROM employees - 导出CSV时,在“指定文本限定符”步骤,把文本限定符设置为无;
- 注意:如果你的字段值本身包含双引号,需要自己手动转义(比如把单个
"换成两个""),否则会破坏CSV的格式。
内容的提问来源于stack exchange,提问作者Corey
相关产品推荐
相关产品推荐

