SQL Server 2019导入IP2LOCATION-LITE-DB5.CSV失败求助
解决IP2LOCATION-LITE-DB5.CSV导入SQL Server 2019失败的问题
错误原因
你用-N参数生成的格式文件是原生二进制格式,但导入时指定了FORMAT='CSV'(文本格式),两者冲突导致报错。CSV导入要求所有字段定义为字符/Unicode类型并带有终止符,原生格式不满足这个要求。
解决步骤
1. 确认目标表结构匹配
IP2LOCATION-LITE-DB5的标准列结构如下,确保你的表字段类型和顺序完全一致:
ip_from(BIGINT)ip_to(BIGINT)country_code(VARCHAR(2))country_name(VARCHAR(64))region_name(VARCHAR(128))city_name(VARCHAR(128))latitude(FLOAT)longitude(FLOAT)
2. 重新生成CSV专用格式文件
使用-c(字符格式)或-w(Unicode格式)参数生成适配CSV的格式文件,同时指定逗号作为字段终止符:
bcp [ip2location].[dbo].[IP2LOCATION-LITE-DB5] format nul -T -c -t, -f D:\IP2LOCATION-LITE-DB5.CSV\DB5_CSV.fmt
-c:以ASCII字符格式处理数据,适合大多数CSV场景-t,:指定字段终止符为逗号(CSV默认分隔符)-T:使用Windows身份验证连接SQL Server
3. 修改OPENROWSET语句导入
如果CSV文件包含表头行,需添加FIRSTROW=2跳过第一行;如果字段有引号包裹,补充FIELDQUOTE='"'参数:
SELECT TOP(10) * FROM OPENROWSET( BULK N'D:\IP2LOCATION-LITE-DB5.CSV\IP2LOCATION-LITE-DB5.CSV', FORMATFILE = N'D:\IP2LOCATION-LITE-DB5.CSV\DB5_CSV.fmt', FORMAT='CSV', FIRSTROW=2, -- 跳过表头行,无表头则删除此参数 FIELDQUOTE='"' -- 若CSV字段用引号包裹则添加 ) AS DATA
4. 备选:直接用BCP命令导入(更简单)
如果表结构完全匹配,可跳过格式文件,直接用BCP命令完成导入:
bcp [ip2location].[dbo].[IP2LOCATION-LITE-DB5] in D:\IP2LOCATION-LITE-DB5.CSV\IP2LOCATION-LITE-DB5.CSV -T -c -t, -F2
-in:指定导入操作-F2:从第2行开始导入(跳过表头)
额外排查点
- 检查CSV文件编码:若为UTF-8带BOM,改用
-w参数生成格式文件并导入 - 处理特殊字符:若字段包含逗号、换行符,确保CSV用引号包裹这些字段,否则会导致列映射错误
内容的提问来源于stack exchange,提问作者Walter Verhoeven
相关产品推荐
相关产品推荐

