SQL执行insert报错:varchar转int失败,已设字段为varchar原因排查
报错原因解析
Conversion failed when converting the varchar value 'apple' to data type int
核心问题
该报错和你定义为varchar类型的FieldC无关,问题出在插入值和表列的顺序、类型不匹配:
你创建的临时表##temp列定义顺序为:
- 第1列
FieldA:numeric(20,10)数值类型 - 第2列
FieldB:numeric(20,10)数值类型 - 第3列
FieldC:varchar(255)字符串类型
你执行的INSERT语句没有指定插入列,数据库会默认按表定义的列顺序匹配你输入的值:
insert into ##temp values(1.1, 2.1, 3.1), (4.1, 5.1, 6.1), ('apple', 'pear', 'orange')
第三组插入值('apple', 'pear', 'orange')按顺序对应时:
- 第一个值
apple要插入到数值类型的FieldA列 - 数据库会尝试自动将字符串
apple转换为数值类型,因数据库隐式类型转换优先级规则,会先尝试转int再匹配numeric类型,转换失败就触发了该报错
补充说明
前两组插入值里的3.1、6.1虽然是数值,但因为对应到字符串类型的FieldC,数值可以隐式转换为字符串,所以不会触发报错。
修复示例
如果第三组的三个字符串是要分别插入三个列,需要调整前两列的输入为合法数值;如果三个字符串都是要存入FieldC,可以指定插入列:
-- 仅插入FieldC列的示例 insert into ##temp(FieldC) values('apple'), ('pear'), ('orange')
内容的提问来源于stack exchange,提问作者Absinthe
相关产品推荐
相关产品推荐

