今天遇到了个特别奇怪的问题,请教大家,问题描述如下:查询这条语句:
select E0101,MC0000 from E01 where DEPT_CODE =11101010114
得到如下结果:
消息 8115,级别 16,状态 8,第 1 行
将 varchar 转换为数据类型 numeric 时出现算术溢出错误。-------------
查询这条语句:
select E0101,MC0000 from E01 where DEPT_CODE =11101040101010102
得到如下结果:
正常。E0101 类型为:INT IDENTITY
DEPT_CODE类型为:varchar(20).请问第一条语句出错的原因?
select E0101,MC0000 from E01 where DEPT_CODE =11101010114
得到如下结果:
消息 8115,级别 16,状态 8,第 1 行
将 varchar 转换为数据类型 numeric 时出现算术溢出错误。-------------
查询这条语句:
select E0101,MC0000 from E01 where DEPT_CODE =11101040101010102
得到如下结果:
正常。E0101 类型为:INT IDENTITY
DEPT_CODE类型为:varchar(20).请问第一条语句出错的原因?
/???
go
CREATE TABLE E01(E0101 varchar(10), DEPT_CODE varchar(20))
INSERT E01 SELECT
'001' , '11101010114' UNION ALL SELECT
'002' , '11101010 ' UNION ALL SELECT
'003' , 'DCB' UNION ALL SELECT
'004' , 'CA'
select E0101 from E01 where DEPT_CODE =11101010114
/*
E0101
----------
001
消息 8114,级别 16,状态 5,第 8 行
从数据类型 varchar 转换为 numeric 时出错。
*/select E0101 from E01 where DEPT_CODE ='11101010114' E0101
----------
001(1 行受影响)
---
DEPT_CODE 是字符串
11101010114是数字
DEPT_CODE 的值在转化为数字的时候发生错误
11101010114需要用单引号括起来 select E0101,MC0000 from E01 where DEPT_CODE ='11101010114'
原因在于你没有‘’,sql把它当整数处理了,于是就把[DEPT_CODE]这一列的转化成整数处理,转化的大小是你从where 里面传进来的大小,因为你的where 里面的数比你在[DEPT_CODE]数小,由大数转到小一点的数,溢出,所以出错,反过来是对的;
select E0101,MC0000 from E01 where DEPT_CODE =‘11101010114’
DECLARE @TB TABLE(ID BIGINT)
INSERT @TB SELECT
11101040101010102
UNION ALL
SELECT 11101040101SELECT CONVERT(INT,ID) FROM @TB(所影响的行数为 2 行)服务器: 消息 8115,级别 16,状态 2,行 7
将 expression 转换为数据类型 int 时发生算术溢出错误。