今天遇到了个特别奇怪的问题,请教大家,问题描述如下:查询这条语句:
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).请问第一条语句出错的原因?

解决方案 »

  1.   

    select E0101,MC0000 from E01 where cast( DEPT_CODE as varchar(100)) =11101010114 
      

  2.   

    select E0101,MC0000 from E01 where cast( DEPT_CODE as varchar(100)) ='11101010114'
      

  3.   

    select E0101,MC0000 from E01 where DEPT_CODE ='11101010114'
    /??? 
      

  4.   

    如果使用5位以上的字符串转换为numeric时就会出现“将 varchar 转换为数据类型 numeric 时出现算术溢出错误”这样的错误,如果使用5位以下(含5位)的就不会出错。
      

  5.   

    select E0101  from E01 where DEPT_CODE ='11101010114' --- 可能你的DEPT_CODE 列含有非数字的字符
      

  6.   

    ---看了就明白了if object_id('E01')is not null drop table E01
    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 行受影响)
    ---
      

  7.   

    select E0101,MC0000 from E01 where DEPT_CODE =11101010114
    DEPT_CODE 是字符串 
    11101010114是数字 
    DEPT_CODE 的值在转化为数字的时候发生错误
    11101010114需要用单引号括起来 select E0101,MC0000 from E01 where DEPT_CODE ='11101010114'
      

  8.   


    原因在于你没有‘’,sql把它当整数处理了,于是就把[DEPT_CODE]这一列的转化成整数处理,转化的大小是你从where 里面传进来的大小,因为你的where 里面的数比你在[DEPT_CODE]数小,由大数转到小一点的数,溢出,所以出错,反过来是对的;
      

  9.   

    DEPT_CODE是varchar的话,要加单引号的
    select E0101,MC0000 from E01 where DEPT_CODE =‘11101010114’ 
      

  10.   

    这个解释很符合,楼主看下数据情况
    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 时发生算术溢出错误。