sql server 2005table p
字段 mm decimal(4, 2)insert p(mm) values(9.999999)
执行后是10.00insert p(mm) values(9.9911111)
执行后是9.99也就是说,sql server 自动四舍五入了,
我想问问,上面的sql语句怎么能够不让sql server 自动四舍五入,而是返回错误信息

解决方案 »

  1.   

    什么错误信息都行,
    因为我不需要sql server自动四舍五入。
      

  2.   


    if(插入值的小数位>2)
    begin
       goto Error1
    endreturn
    Error1:  
        RAISERROR ('输入的值的位数超过两位', 16, 1)  
      

  3.   

    前端当然可以做小数点位数的判断。但是,sql server 能不能检测一下小数点位数呢。
    这种insert 完全不符合数据库的字段定义,而且我想
    有很多用户不需要sql server 这么聪明。
      

  4.   

    select len(8.5100)-len(cast(8.5100 as decimal(18,0)))-1
      

  5.   

    这个四舍五入我觉得很奇怪,假如insert 超过长度的string 会发生错误
    为什么超过小数点位数的decimal就要自动四舍五入,正常insert呢。
      

  6.   


    insert p(mm) values(9.999999) 实际上执行的是
    insert p(mm) values(cast(9.999999 as decimal(4,2))) 问题是,如果用户想四舍五入,完全可以直接把sql写成、
    insert p(mm) values(cast(9.999999 as decimal(4,2)))
    而不需要数据库引擎直接想当然的四舍五入。