sql 问题

YnSky 2014-11-25 05:18:51
print convert(decimal(18,2),152.00/80)

这句话在sql2005中运行都正确

sql2008中运行有的机子对。有的机子错。

(SQL2008中-两台XP机子对。一台XP机子错,一台WIN8机子错。)
错误提示:
消息 8115,级别 16,状态 7,第 1 行
将 numeric 转换为数据类型 numeric 时出现算术溢出错误。

不要修改代码,代码修改很简单,现在需要知道到底是系统配置还是SQL配置问题,
因为用到的地方太多了,没法一个个修改代码)

希望有高手和碰到过的牛人帮忙解决下!


...全文
306 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxwangjm 2014-11-27
  • 打赏
  • 举报
回复
http://q.cnblogs.com/q/51643/ 只要加一个,SET NUMERIC_ROUNDABORT OFF可以了 还真的是设置问题
山寨DBA 2014-11-26
  • 打赏
  • 举报
回复
你这个真是奇葩了。。。着实不晓得在哪里设置,帮顶一下。。。 你可以直接找版主黄钊吉问问,他是高手,说不定有解
YnSky 2014-11-26
  • 打赏
  • 举报
回复

WIN8+SQL2008还是报这个错,
有台XP+sql2008也是这个错。
有台XP+sql2008是对的。

我猜想应该是SQL或者系统设置问题
不过到底是哪里设置的问题呢?
求赐教!
YnSky 2014-11-26
  • 打赏
  • 举报
回复
还是没有解决。现在 WIN8+SQL2008 服务器上就是不行。
山寨DBA 2014-11-26
  • 打赏
  • 举报
回复
引用 18 楼 YnSky 的回复:
问题解决了。是安装问题,只要完全安装有的机子可以,有的就不可以,安装的时候选这几个就不报错了。 多谢各位的帮忙了,结贴!
虽然你重装问题就解决了,但是我着实不敢相信是选了这几个实例功能而导致的问题解决。。。这几个实例和那个应该都没关系的。。。 如果不嫌麻烦,可以重装一台,不选那几个实例,或者一个一个选,看看到底是哪个问题。。。哈哈 总之恭喜,解决。。。
jxwangjm 2014-11-26
  • 打赏
  • 举报
回复
我试了一下没问题, 楼主你确定是这段代码有问题 我觉得可能是其他部分有问题
YnSky 2014-11-26
  • 打赏
  • 举报
回复

问题解决了。是安装问题,只要完全安装有的机子可以,有的就不可以,安装的时候选这几个就不报错了。
多谢各位的帮忙了,结贴!
还在加载中灬 2014-11-25
  • 打赏
  • 举报
回复
服务器貌似没设定这些的地方,我猜想真要有影响,也是数据库级别,或本地环境原因 你可以试下,在出问题的服务器的别的数据库上面执行一下,看语句有没有问题~
YnSky 2014-11-25
  • 打赏
  • 举报
回复
为什么SQL2005都对呢? 主要是以前都这样写的.以前都是对的. 升级到SQL2008有的机子对.有的机子不对.这才有问题的. 如果修改代码,工作量太大了, 而且找不全,既然有的机子SQL2008可以,就想找到怎么可以把不可以用的机子配置成可以用的呢?
山寨DBA 2014-11-25
  • 打赏
  • 举报
回复
引用 7 楼 YnSky 的回复:
2台XP都是32位的一台报错。一台不抱错。你们能帮忙测试一下吗?



你看看我在我这边测试了很多机器,都是这个结果。。。我还多加了几个,希望对你理解有所帮助
山寨DBA 2014-11-25
  • 打赏
  • 举报
回复
引用 7 楼 YnSky 的回复:
2台XP都是32位的一台报错。一台不抱错。你们能帮忙测试一下吗?
引用 8 楼 YnSky 的回复:
有台WIN8是64位的,也报错。
如果是这样,那真是有点奇葩了。。。 我在我这边测试是可以的,我这边目前已经找不到32位的机器和系统了,我们公司早就全部改成64位的了。。。 我同时找了其他同事的几台电脑,都是没有问题的,在好几个服务器上运行也是对的。。。。
山寨DBA 2014-11-25
  • 打赏
  • 举报
回复
引用 2 楼 YnSky 的回复:
关键有相同的系统(XP)一台可以,一台不可以,XP位数是一样的把!
刚才引用错了。 32位或者64位,最开始指的是硬件的数据总线的位数(也叫寻址空间),后来又根据数据总线的位数开发有32位系统或者64位系统,64位系统会向下兼容32位系统,64位系统是可以装在数据总线为32位的机器上的。因此除了看你的系统是多少位的之外还要看数据总线是多少位的。你的机子肯定特别老,可能是32位的数据总线,如果你的系统是64位,那就可能是你的数据总线是32位的了。。。这个是比较底层的硬件知识,大学的计算机组成原理里面有详细的介绍。 其实你的问题也不难解决,一般人用不到decimal(18,2)这么大的数据的,改小一些就可以了decimal(10,2)已经上亿了,足够用了。。。 但是你要想知道为什么的话,我目前掌握的知识就只能是上面的回答了。。。。 求高手再赐教
YnSky 2014-11-25
  • 打赏
  • 举报
回复
有台WIN8是64位的,也报错。
YnSky 2014-11-25
  • 打赏
  • 举报
回复
2台XP都是32位的一台报错。一台不抱错。你们能帮忙测试一下吗?
山寨DBA 2014-11-25
  • 打赏
  • 举报
回复
引用 4 楼 ky_min 的回复:
引用 2 楼 YnSky 的回复:
关键有相同的系统(XP)一台可以,一台不可以,XP位数是一样的把!
XP也有64的
64位系统会向下兼容32位系统,你还要看看你的数据总线是多少位的,你的机子肯定特别老,是32位的数据总线。 32位或者64位,最开始指的是硬件的数据总线的位数,后来又根据数据总线的位数开发有32位系统或者64位系统,64位系统是可以装在数据总线为32位的机器上的。如果你的系统是64位,那就可能是你的数据总线是32位的了。。。
山寨DBA 2014-11-25
  • 打赏
  • 举报
回复
64位的系统decimal(18,2)最大可以表示9999999999999999.99 ,但是32位系统就苦逼了,没有decimal(18,2) 这么大的东东,所以转换会报错。。。 这就想同样是int类型在32位系统和64位系统中表示的数据范围不一样是一个道理。
还在加载中灬 2014-11-25
  • 打赏
  • 举报
回复
引用 2 楼 YnSky 的回复:
关键有相同的系统(XP)一台可以,一台不可以,XP位数是一样的把!
XP也有64的
YnSky 2014-11-25
  • 打赏
  • 举报
回复
关键有相同的系统(XP)一台可以,一台不可以,XP位数是一样的把!
山寨DBA 2014-11-25
  • 打赏
  • 举报
回复
如果没猜错,你看看你的系统是否有的是32位的有的是64位的,检查一下这个,比对一下两个系统的位数

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧