SQL Server 2008 R2使用BCP命令导入文件仅导入首行问题咨询
问题根因
- 未显式指定分隔符规则:
-c参数默认使用制表符作为字段分隔符、\n作为行分隔符,如果源文件实际是Windows格式(行终止符为\r\n),或者部分字段间误写为空格而非制表符,会导致第二行无法被正确识别拆分。 - 日期格式兼容问题:SQL Server 2008 R2的
datetime类型对带T的ISO8601日期格式(如2021-08-20T01:02:03)支持不足,会触发类型转换错误,导致第二行导入失败。 - 字段数量不匹配:如果源文件中
sean和y之间为制表符而非普通空格,会被拆分为两个独立字段,导致整行字段数超出表定义的6个字段,后续行解析错位。
解决方案
- 显式指定分隔符参数:在bcp命令中新增
-t "\t"指定字段分隔符为制表符,-r "\r\n"指定行终止符为Windows风格回车换行(如果是Linux/Mac生成的源文件可改为-r "\n")。 - 处理日期兼容问题:二选一即可
- 修改源文件,将所有带
T的日期替换为空格分隔的格式,和第一行的日期格式保持一致 - 自定义bcp格式文件,将日期字段临时映射为varchar类型导入,后续再批量转换为datetime类型
- 修改源文件,将所有带
- 校验源文件格式:确认
sean和y之间为普通空格,所有字段之间均为制表符分隔,每行拆分后刚好为6个字段。 - 增加错误容错参数:命令中新增
-m 100参数允许最多100个错误,避免单条数据错误终止全部导入,同时查看C:\temp\mherr.txt错误日志确认具体报错信息。
修改后的参考命令:
bcp DLTI.dbo.SeanTest IN C:\Temp\SeanYang\datafilesrc.txt -V100 -c -t "\t" -r "\r\n" -m 100 -S [server] -U [user] -P [password] -e C:\temp\mherr.txt
内容的提问来源于stack exchange,提问作者godesteem
相关产品推荐
相关产品推荐

