问题好多呀,再提一个,关于float(53)和科学计数方面

号天大教主 2008-01-16 12:27:21
SQL SERVER 2005中:

CREATE PROCEDURE [dbo].[P_TEST]
@an_id float(53)
AS
BEGIN
SELECT @an_id RETURN;

END

说明一下:TEST表中id 的类型是numeric(18,0),是主键。
在执行时:
EXEC P_TEST 1234567890123;
执行的结果@an_id会变成科学计数法,搞得后面的SQL肯定是取不到值了。

我试了用cast,convert,但是发现值会变掉,这样也不行,我现在把@an_id参数设成varchar了。
有没有什么办法解决不让他变为科学计数的方法。
...全文
315 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
号天大教主 2008-01-16
  • 打赏
  • 举报
回复
再问一下,我的好多存储过程中有好多工具转换过来的float(53)。
第一个问题是:我是不是应该把所有的参数中的float换成numeric,因为数据库中基本都是numric的。而且这些参数都是查询用到的参数。
第二个问题是:数据库中可能是numeric(18,0),numeric(12,0),就是说长度不同,我不想去查每个用到的参数需要多长,能不能直接把参数设大点,如:numeric(30,0),这样的话,会不会影响后面的查询语句能得到正确执行结果。

谢谢
号天大教主 2008-01-16
  • 打赏
  • 举报
回复
是这样呀,邹大师一语道破了。
其实存储过程是从oracle中转换来的,是用的微软的SSMA工具转的,原来@an_id是number类型,经过工具转换后就变成了float了,我想微软应该很牛的,所以就没换成其它的。也怪我对SQL SERVER的数据类型不是太熟吧。
二楼的不行哟,主键的数字都变了,查询不出数据来的。
netcup 2008-01-16
  • 打赏
  • 举报
回复
把FLOAT换成DEC(24,0)试下.
zjcxc 元老 2008-01-16
  • 打赏
  • 举报
回复
科学计数法只是显示的问题

问题的根源在于 float 类型本身是一种不精确的数据表示方法, 也就是说, 你放一个数据进去, 拿出来的时候可能会存在一点点点误差, 而这点点点误差在做数据比较的时候就会导致数据不一致, 从而查不到数据


既然你的数据只是 numeric(18,0), 参数就不要用 float, 也用 numeric(18, 0) 就好了.
-狙击手- 2008-01-16
  • 打赏
  • 举报
回复
CREATE   PROCEDURE   [dbo].[P_TEST]     
@an_id float(53)
AS
BEGIN
SELECT @an_id


END
go



exec P_test 9234567890123249


drop proc p_test


-----------------------------------------------------
9234567890123248.0

(所影响的行数为 1 行)
changjiangzhibin 2008-01-16
  • 打赏
  • 举报
回复
sign
云中客 2008-01-16
  • 打赏
  • 举报
回复
这是一个细节问题,以前还真没有注意过,学习!!
netcup 2008-01-16
  • 打赏
  • 举报
回复
晕,怎么我打开这个帖子后面没别人的回复呢?我发帖子后却又出现一大堆回复?
应该全部换成NUMBERIC.拷贝到记事本,然后全部转换.长度可以设置长些,长了不要紧,短了会出问题的
netcup 2008-01-16
  • 打赏
  • 举报
回复
怎么又问了一次?不是发过一个帖子了么?
把FLOAT换成NUMBERIC或者DEC试下

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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