You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何忽略SQL Server表值中的换行?导出CSV单记录分行问题求助

解决SQL Server用sqlcmd导出CSV时含换行符的记录拆分问题

当使用sqlcmd导出包含换行符的字段时,CSV会将字段内的换行识别为新记录的开始,导致单条记录被拆分。以下是几种可行的解决办法:

方法1:替换字段中的换行符

在查询语句中直接将字段里的回车(CHAR(13))和换行(CHAR(10))替换为空格或其他符号,从根源上避免换行导致的拆分问题。

修改后的sqlcmd命令示例:

C:\>sqlcmd -S EC2AMAZ-5UNBD90 -Q "SELECT hmy, col1, col2, REPLACE(REPLACE(your_text_column, CHAR(10), ' '), CHAR(13), ' ') AS your_text_column /* 替换为实际列名,补充其他列 */ FROM dbo.PMDOCS WHERE hmy=95613900;" -s "," -o "C:\pmdocs_ms_v1.csv" -E -y0

其中your_text_column需要替换为实际包含换行符的列名,REPLACE函数会把所有回车和换行替换成空格,确保字段内容在同一行。

方法2:用双引号包裹所有字段

标准CSV格式中,被双引号包裹的字段即使包含换行符,也会被解析为单个字段。可以在查询中给每个字段添加双引号,同时处理字段内可能存在的双引号(将单个双引号替换为两个)。

对应的sqlcmd命令:

C:\>sqlcmd -S EC2AMAZ-5UNBD90 -Q "SELECT '"' + REPLACE(CAST(hmy AS VARCHAR(20)), '"', '""') + '"', '"' + REPLACE(CAST(col1 AS VARCHAR(20)), '"', '""') + '"', '"' + REPLACE(your_text_column, '"', '""') + '"' /* 补充其他列 */ FROM dbo.PMDOCS WHERE hmy=95613900;" -s "," -o "C:\pmdocs_ms_v1.csv" -E -y0 -W
  • 用CAST将非字符串类型的列转换为字符串,避免拼接错误
  • REPLACE(..., '"', '""')处理字段内的双引号,符合CSV格式规范
  • -W参数用于去除输出中多余的空格,让CSV更整洁

方法3:使用bcp工具替代sqlcmd

bcp是SQL Server专门用于批量数据导入导出的工具,对特殊字符的处理更友好。如果需要频繁导出数据,推荐使用这个工具。

基本命令示例(配合字段包裹):

bcp "SELECT '"' + REPLACE(CAST(hmy AS VARCHAR(20)), '"', '""') + '"', '"' + REPLACE(your_text_column, '"', '""') + '"' /* 补充其他列 */ FROM dbo.PMDOCS WHERE hmy=95613900" queryout "C:\pmdocs_ms_v1.csv" -S EC2AMAZ-5UNBD90 -E -c -t "," -r "\n" -q
  • -c:使用字符模式导出
  • -t ",":指定字段分隔符为逗号
  • -r "\n":指定行终止符为换行
  • -q:处理包含特殊字符或保留字的查询

内容的提问来源于stack exchange,提问作者Yang L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:15:31