从SQL Server导出CSV时保留字段内逗号(禁用引号方案)
解决SQL Server导出CSV时含逗号字段的列错位问题(无需双引号包裹)
下面是几个不用双引号包裹字段就能解决问题的实用方案:
方案1:替换字段中的逗号为非冲突符号
如果你的业务数据里不会出现某个特定符号(比如分号;、竖线|或波浪线~),可以先在SQL查询里把字段内的逗号替换成这个符号,导出后再在目标库中还原:
- 导出前执行替换查询:
SELECT REPLACE(FruitsGroup, ',', ';') AS FruitsGroup, Column1, Column2 FROM YourDatabase.dbo.YourTable; - 用这个查询结果导出CSV文件
- 导入目标数据库时,再把符号替换回逗号:
SELECT REPLACE(FruitsGroup, ';', ',') AS FruitsGroup, Column1, Column2 INTO TargetDatabase.dbo.TargetTable FROM ImportedData;
注意:一定要选业务数据中不存在的符号,避免替换后出现数据混乱。
方案2:使用自定义字段分隔符导出(推荐)
直接放弃用逗号作为CSV的分隔符,改用一个不会出现在字段内容里的符号,这样根本不会触发拆分问题:
用bcp命令行导出
示例命令(按需替换服务器、数据库、路径等参数):
bcp "SELECT FruitsGroup, Column1, Column2 FROM YourDatabase.dbo.YourTable" queryout "C:\data_export.csv" -S YourServerName -d YourDatabaseName -U YourUsername -P YourPassword -c -t "|" -r "\n"
参数说明:
-t "|":指定字段分隔符为竖线|-c:使用字符格式导出-r "\n":指定行分隔符为换行符
导出后,导入目标系统时,只要设置同样的字段分隔符为竖线|即可正常识别列结构。
用SQL Server Management Studio(SSMS)导出
- 右键表 → 任务 → 导出数据
- 选择目标为“平面文件目标”,指定导出路径
- 在“平面文件目标编辑器”中,把“列分隔符”改成你选的非逗号符号(比如
|),完成导出
方案3:通过SSIS包自定义导出格式
如果需要定期导出,用SSIS包更灵活:
- 创建SSIS包,添加“平面文件连接管理器”
- 在连接管理器的“常规”选项卡,设置“格式”为“分隔”,然后在“列”选项卡指定字段分隔符为非逗号符号
- 添加“数据流任务”,将SQL Server源的数据映射到平面文件目标,执行包完成导出
内容的提问来源于stack exchange,提问作者Abdul Basit
相关产品推荐
相关产品推荐

