现象
执行
select * from lx_stuinfo where lx_stuinfo.stunu=202202002;
报错如下:
消息 248,级别 16,状态 1,第 2 行
转换 nvarchar 值 ‘201201013201201013201201013’ 时溢出了整数列。
表结构说明:
lx_stuinfo表的stunu字段为nvarchar型,也就是字符型的,但是保存的数据基本都有数字组成。
原因分析
在执行 lx_stuinfo.stunu=202202002
查询时,数据库会把整个表中的stunu先自动转换成数值型,因为有的记录中包含一条非常长的数字的'201201013201201013201201013'
因为位数过长,导致无法转换成数值型才会报错。
解决办法
把查询语句:
select * from lx_stuinfo where lx_stuinfo.stunu=202202002;
末尾的202202002改成’202202002’问题得到解决。
正确的语句是:
select * from lx_stuinfo where lx_stuinfo.stunu='202202002';