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

如何忽略pipe delimited CSV文件中因添加逗号产生的双引号?

解决BULK INSERT导入竖线分隔CSV时的双引号问题

针对你遇到的导入后首尾出现双引号、原有双引号变为连续两个的问题,有以下几种解决方式:

1. 使用格式化文件(推荐)

SQL Server的BULK INSERT支持通过XML格式化文件指定字段的引号封装规则,自动处理双引号:

步骤1:创建格式化文件

根据你的CSV列数,生成对应的XML格式化文件(假设CSV有3列,示例如下),保存为format.xml:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="|" QUOTE="&quot;"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="|" QUOTE="&quot;"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\n" QUOTE="&quot;"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Column1" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="2" NAME="Column2" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Column3" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>
  • 每个<FIELD>节点的QUOTE="&quot;"表示字段由双引号封装
  • 调整ID、TERMINATOR和<COLUMN>节点数量,匹配你的实际列数和字段类型

步骤2:修改BULK INSERT语句

在WITH子句中添加FORMATFILE参数,指定格式化文件路径:

BULK INSERT #temp1
FROM '\\as03\\AppData\\PipeDelimited.csv' 
WITH  (
       FIRSTROW = 2 
     , FIELDTERMINATOR ='|'                      
     , ROWTERMINATOR='\n'
     , ERRORFILE ='\\as03\\AppData\\ErrorFiles\\PipeDelimited.csv'
     , CODEPAGE = '65001'
     , MAXERRORS =  99999999 
     , FORMATFILE = '\\as03\\AppData\\format.xml' -- 替换为你的格式化文件路径
)

执行后,SQL Server会自动去除字段首尾的双引号,并将连续的双引号("")还原为单个双引号。

2. 导入后手动清理数据

如果不想使用格式化文件,可以先将数据导入临时表,再通过字符串函数清理双引号:

方式1:更新临时表数据

UPDATE #temp1
SET 
    Col1 = REPLACE(TRIM('"' FROM Col1), '""', '"'),
    Col2 = REPLACE(TRIM('"' FROM Col2), '""', '"'),
    -- 依次处理所有列
    ColN = REPLACE(TRIM('"' FROM ColN), '""', '"');

方式2:插入目标表时直接处理

INSERT INTO YourTargetTable (Col1, Col2, ColN)
SELECT 
    REPLACE(TRIM('"' FROM Col1), '""', '"'),
    REPLACE(TRIM('"' FROM Col2), '""', '"'),
    -- 依次处理所有列
    REPLACE(TRIM('"' FROM ColN), '""', '"')
FROM #temp1;
  • TRIM('"' FROM 列名):去除字段首尾的双引号
  • REPLACE(..., '""', '"'):将连续的双引号替换为单个双引号

3. 从根源避免Excel添加引号

问题本质是Excel保存CSV时,会自动给包含逗号、换行或双引号的字段添加双引号,并将原有双引号转义为两个。如果可以跳过Excel处理,直接用Notepad++等文本编辑器打开竖线分隔文件,手动添加逗号后保存,就能避免自动添加引号的问题。

内容的提问来源于stack exchange,提问作者Gagan Maharjan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:18:34