使用bcp导入SQL Server时如何去掉字段双引号并跳过末尾3行
bcp加载带引号数据及跳过末尾行的解决方法
处理字段包裹的双引号
根据你使用的SQL Server版本选择对应方案:
- 若使用SQL Server 2017及以上版本,可直接使用bcp原生的
-FIELDQUOTE参数指定双引号为字段引用符,bcp会自动识别并去除字段前后的双引号,无需额外预处理文件。 - 若使用SQL Server 2016及更低版本,原生bcp不支持字段引用符配置,可通过预处理脚本批量移除文件中的双引号,或者自定义bcp格式文件配置字段的前后缀规则实现。
跳过文件末尾3行记录
bcp本身没有提供跳过末尾行的原生参数,可通过两种方式实现:
- 方案一:预处理文件直接删除末尾3行,该方法无需提前统计文件总行数,适配性更强。
- 方案二:如果可以提前确定文件的总行数N,可直接使用bcp的
-L参数指定加载的最后一行行号为N-3即可。
完整操作示例
适配SQL Server 2017及以上版本
- 执行PowerShell命令预处理文件,删除末尾3行:
Get-Content Filename.text | Select-Object -SkipLast 3 | Set-Content Filename_Trimmed.text
- 执行修改后的bcp命令,新增
-FIELDQUOTE参数:
bcp database.schema.tablename in Filename_Trimmed.text -T -c -t"|" -r"0x0a" -F 3 -m 2 -FIELDQUOTE "\""
适配SQL Server 2016及以下版本
- 执行PowerShell命令预处理文件,同时移除双引号并删除末尾3行:
Get-Content Filename.text | Select-Object -SkipLast 3 | ForEach-Object { $_ -replace '"', '' } | Set-Content Filename_Prepared.text
- 使用你原有的bcp命令直接加载预处理后的文件即可:
bcp database.schema.tablename in Filename_Prepared.text -T -c -t"|" -r"0x0a" -F 3 -m 2
注:你原有命令中的
-F 3参数已经实现了跳过前2行的头部记录(UHDR行、表头行),无需调整。
内容的提问来源于stack exchange,提问作者Shagg
相关产品推荐
相关产品推荐

