使用SQL Server BCP命令导出CSV时的格式异常问题求助
解决方案:BCP导出含逗号字段的标准CSV文件
问题分析
当前导出的CSV存在两个核心问题:
- 每行首尾缺少双引号,字段间分隔符格式错误(出现
"","而非",") - 换行符不兼容Windows标准,导致Excel无法识别行分隔
以下提供两种可行的解决方法:
方法1:修改格式文件(.fmt)
调整test.fmt的字段前缀与终止符配置,确保每个字段被双引号包裹,且行尾使用标准换行符:
13.0 3 1 SQLCHAR 0 4000 "\"" 0 "" 1 col1 SQL_Latin1_General_CP1_CI_AS 2 SQLCHAR 0 4000 "\",\"" 0 "" 2 col2 SQL_Latin1_General_CP1_CI_AS 3 SQLCHAR 0 4000 "\"\r\n" 0 "" 3 col3 SQL_Latin1_General_CP1_CI_AS
配置说明:
- 第一列前缀设置为转义双引号
\",确保行首字段以双引号开头 - 中间列终止符为
"\",\"",实现字段间","的标准分隔 - 最后一列终止符为
\"\r\n",确保行尾字段以双引号结束,并添加Windows标准换行符
修改后执行原BCP命令,即可生成符合要求的CSV:
"abcd,inc.","USD,inc","1234" "pqrs,inc","USD,inc","6789" "stuv,inc","USD,inc","0009"
方法2:查询中直接拼接CSV格式(无需格式文件)
通过SQL查询直接构造标准CSV行,规避格式文件的复杂配置:
DECLARE @V_BCP_QUERY VARCHAR(4000), @V_BCP_OUTPUT_FILE VARCHAR(1500), @V_BCP_COMMAND VARCHAR(4000) begin -- 用CHAR(34)生成双引号,拼接标准CSV行格式 SET @V_BCP_QUERY='""SELECT CHAR(34) + col1 + CHAR(34) + '','' + CHAR(34) + col2 + CHAR(34) + '','' + CHAR(34) + col3 + CHAR(34) FROM TABS..XYZ""' SET @V_BCP_OUTPUT_FILE='""D:\OUTPUT.csv""' -- 指定字符格式导出+Windows标准换行符 SET @V_BCP_COMMAND='bcp '+@V_BCP_QUERY+' queryout '+@V_BCP_OUTPUT_FILE+' -c -T -S ""DEV-CR"" -r ""\r\n""' EXECUTE Master.dbo.xp_CmdShell @V_BCP_COMMAND end
配置说明:
CHAR(34)等价于双引号,避免字符串转义冲突-c参数指定字符格式导出,无需额外格式文件-r "\r\n"强制使用Windows标准换行符,解决Excel单行显示问题
内容的提问来源于stack exchange,提问作者HBK
相关产品推荐
相关产品推荐

