转换溢出了一个int列。 Witouth convert()或cast()

时间:2015-05-11 13:18:03

标签: sql sql-server

我有一张具有以下结构的表:

enter image description here

在MGDCOCRE和MGDCODEB列中具有与'2158890000905''2122190000905'相似的值'...

当尝试运行简单的UPDATE或SELECT(E.G:从MGDMOCOT中选择MGDIDENT,其中MGDIDPAG不为空且mgdcocre = 1)时,此表中显示错误消息:

  

varchar值'2158890000397'的转换溢出了一个int列。

这个问题的可能解决方案是什么?

感谢的

1 个答案:

答案 0 :(得分:1)

select MGDIDENT 
from MGDMOCOT 
where MGDIDPAG is not null and mgdcocre=1

SQL Server在这做什么?现在,mgdcocre是varchar,但1是整数。因此,SQL Server隐式将mgdcocre列中的所有varchars转换为整数,以对1进行整数比较。这会失败,因为至少有一个varchars表示转换为整数的数字太大。

解决方案:

select MGDIDENT 
from MGDMOCOT 
where MGDIDPAG is not null and mgdcocre='1'

这里比较两个varchars,因此不需要强制转换。