当前位置: 代码迷 >> Sybase >> 存储过程里有个单价本来是7位输出时总是6位,强制转换都不行?该怎么处理
  详细解决方案

存储过程里有个单价本来是7位输出时总是6位,强制转换都不行?该怎么处理

热度:3657   发布时间:2013-02-26 00:00:00.0
存储过程里有个单价本来是7位输出时总是6位,强制转换都不行?
请问各位高手这种问题该如何解决?
code=SQL]Price=(case when HasSpRight(@rightCode,@UserID) = 1 then a.price
  else '0.0000000' end)[[/code]
就这句输出的结果总为6位 实际上位7位,其他地方未定义长短,另外如果我在新增一列比如xx=a.price 出来结果也正确为7位,并且我修改为code=SQL]Price=(case when HasSpRight(@rightCode,@UserID) = 1 then convert(numeric(20,7),a.price) else '0.0000000' end)[[/code]也不正确
但是如果该为code=SQL]Price=(case when HasSpRight(@rightCode,@UserID) = 1 then convert(varchar(15),a.price) else '0.0000000' end)[[/code]
得出的结果也正确
 
然后我右键点击存储过程查看属性,里面有个参数显示,那一列的存储过程为 内置类型, 请问这种情况该如何解决,先谢谢各位。


------解决方案--------------------------------------------------------
帮顶,发到SQL 版那里高手多!!
------解决方案--------------------------------------------------------
看了下你的情况
“case when HasSpRight(@rightCode,@UserID) = 1 then a.price 
else '0.0000000' end”
注意,case这里面新生成的列,会进行数据类型隐性转换的,估计你的情况就是隐性转换的过程中把数据的精度调整了,因为不是很清楚sybase下的数据类型的情况,建议你看下sybase下的数据类型,根据你的数据的情况,取合理的数据类型或自己进行显性转换吧
  相关解决方案