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了。
有没有什么办法解决不让他变为科学计数的方法。
@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了。
有没有什么办法解决不让他变为科学计数的方法。
@an_id float(53)
AS
BEGIN
SELECT @an_id
END
goexec P_test 9234567890123249
drop proc p_test
-----------------------------------------------------
9234567890123248.0(所影响的行数为 1 行)
既然你的数据只是 numeric(18,0), 参数就不要用 float, 也用 numeric(18, 0) 就好了.
其实存储过程是从oracle中转换来的,是用的微软的SSMA工具转的,原来@an_id是number类型,经过工具转换后就变成了float了,我想微软应该很牛的,所以就没换成其它的。也怪我对SQL SERVER的数据类型不是太熟吧。
二楼的不行哟,主键的数字都变了,查询不出数据来的。
第一个问题是:我是不是应该把所有的参数中的float换成numeric,因为数据库中基本都是numric的。而且这些参数都是查询用到的参数。
第二个问题是:数据库中可能是numeric(18,0),numeric(12,0),就是说长度不同,我不想去查每个用到的参数需要多长,能不能直接把参数设大点,如:numeric(30,0),这样的话,会不会影响后面的查询语句能得到正确执行结果。谢谢
把FLOAT换成NUMBERIC或者DEC试下
应该全部换成NUMBERIC.拷贝到记事本,然后全部转换.长度可以设置长些,长了不要紧,短了会出问题的