SQL Server BCP导入CSV文件时如何忽略字段可选外层双引号
解决方法
方法一:使用CSV格式原生参数(推荐,兼容带/不带引号的字段)
高版本BCP工具直接加参数
如果你使用的是18.0及以上版本的BCP工具,无需修改格式文件,直接在原有导入命令中添加--format=csv参数即可自动识别并剥离字段外层的双引号:
bcp Database.Schema.Persons in "W:\test_load_data.csv" --format=csv -f Persons.fmt -S tcp:demo.database.windows.net -U User01 -P P@$$word!
T-SQL批量插入
如果BCP版本较低,可直接在Azure SQL中执行BULK INSERT语句完成导入,无需临时表:
BULK INSERT Database.Schema.Persons FROM 'W:\test_load_data.csv' WITH ( FORMAT = 'CSV', FIELDTERMINATOR = ',', ROWTERMINATOR = '\r\n', FIELDQUOTE = '"', FIRSTROW = 1 -- 若CSV文件首行是表头,将此值改为2 );
你也可以通过sqlcmd命令行调用上述T-SQL语句,实现命令行批量导入:
sqlcmd -S tcp:demo.database.windows.net -U User01 -P P@$$word! -Q "BULK INSERT Database.Schema.Persons FROM 'W:\test_load_data.csv' WITH (FORMAT='CSV', FIELDTERMINATOR=',', ROWTERMINATOR='\r\n', FIELDQUOTE='"', FIRSTROW=1)"
方法二:修改BCP格式文件适配引号场景
如果必须使用低版本BCP工具原生导入,可以调整格式文件的终止符规则,增加虚拟字段自动过滤双引号,修改后的Persons.fmt内容如下:
13.0 3 1 SQLCHAR 0 255 "," 1 LastName SQL_Latin1_General_CP1_CI_AS 2 SQLCHAR 0 1 "\"" 0 QuotePrefix "" 3 SQLCHAR 0 255 "\"\r\n" 2 FirstName SQL_Latin1_General_CP1_CI_AS
说明:新增的第2行是序号为0的虚拟字段,不会映射到目标表,作用是自动匹配并丢弃FirstName字段前的双引号;同时将FirstName的终止符设置为
"\r\n,自动丢弃字段末尾的双引号。对于不带双引号的FirstName场景,可在导入后执行一次UPDATE Database.Schema.Persons SET FirstName = TRIM('"' FROM FirstName)即可完成清理。
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

