使用BCP向SQL Server导入整数数据时值异常求助
问题原因及解决办法
核心原因
你使用的格式文件里将字段类型指定为SQLINT,这是MSSQL的二进制4字节整数类型,但你的源数据是CSV格式的文本字符串数字。bcp会直接把文本的ASCII字节当作二进制INT解析,比如字符串"6"的ASCII码是54,所以插入后site_id变成54,完全不符合预期。
解决方法
有两种可行的修正方式:
方式1:修改格式文件,使用字符类型定义
把格式文件里的SQLINT替换成SQLCHAR,同时设置合适的字符长度(比如10,足够容纳你的整数长度),修改后的bcp.fmt内容如下:
14.0 3 1 SQLCHAR 0 10 "," 1 site_id "" 2 SQLCHAR 0 10 "," 2 view_id "" 3 SQLCHAR 0 10 "\n" 3 content_id ""
修改后重新执行原bcp命令即可。
方式2:直接使用字符模式导入,无需格式文件
去掉-f bcp.fmt参数,加上-c(字符模式)、-t ","(指定字段分隔符)、-r "\n"(指定行分隔符),命令改为:
bcp test_load in /tmp/small_insert_test.csv -S <Server> -U <UID> -P <PWD> -d <DB> -c -t "," -r "\n"
这种方式bcp会自动处理文本字符串到INT字段的转换,更适合CSV文本导入场景。
验证
修改后重新导入,查询test_load表就能看到和源数据一致的数值了。
内容的提问来源于stack exchange,提问作者Josh Kraushaar
相关产品推荐
相关产品推荐

