使用sqlcmd导出SQL Server表到CSV时单行拆多行问题求助
问题原因
SDESC字段值内部包含隐藏的换行符(\n或\r\n),sqlcmd导出时会直接输出这些换行符,导致CSV解析器将其识别为行分隔符,最终单条表记录被拆分成多行。
解决方法
方法1:替换字段内的换行符
如果不需要保留换行符,可通过SQL语句将字段中的换行符替换为空格或其他符号,避免行拆分:
sqlcmd -S EC2AMAZ-5UNBD90 -d miadmfggp_live -Q "SELECT REPLACE(REPLACE(SDESC, CHAR(10), ' '), CHAR(13), ' ') AS SDESC FROM dbo.pmdocs WHERE HMY=95613900;" -s "," -o "C:\pmdocs_ms_v1.csv" -E -y0
CHAR(10)对应换行符,CHAR(13)对应回车符,嵌套REPLACE可同时清理两种换行格式。
方法2:用双引号包裹字段(符合CSV规范)
如果需要保留字段内的换行符,按照CSV标准,需将包含换行的字段用双引号括起,同时转义字段内原有的双引号(替换为""):
sqlcmd -S EC2AMAZ-5UNBD90 -d miadmfggp_live -Q "SELECT '"' + REPLACE(SDESC, '"', '""') + '"' AS SDESC FROM dbo.pmdocs WHERE HMY=95613900;" -s "," -o "C:\pmdocs_ms_v1.csv" -E -y0
导出后,带换行的字段会被双引号包裹,Excel、Pandas等主流CSV工具会正确识别为单个字段,不会拆分行。
内容的提问来源于stack exchange,提问作者Yang L
相关产品推荐
相关产品推荐

