2014-10-02 74 views
-2

我对Windows应用程序的工作,我有一个像这样在vb.net代码:SQL Server的红利没有得到正确的结果

PT1 = PT - LT 
If PT1 > modvAL Then 
q1 = PT1/modvAL 
Else 
q1 = 1 
End If 

这里我PT1值是2752和ModvAL是1440,然后我得到我的Q1值2(这是我的vb.net代码)

set @[email protected]@LT 
if @PT1>@modvAL 
    begin 
    set @[email protected]/1440 
else 
    begin 
    set @q1=1 
    end 

,这是我的存储过程的一部分,我在这里在SQL Server中做同样的事情,但我的Q1没有得到应有的价值?我的存储过程有什么问题

+1

应该是什么样的期望值? – 2014-10-02 09:57:47

+0

我必须得到q1是2在存储程序also.code是越来越正确的。但在SQL中得到1 – user3252014 2014-10-02 09:59:35

+0

为什么存储过程具有魔法值1440,而不是使用@ @ modVal? – DavidG 2014-10-02 10:00:25

回答

2

由于您使用INT数据类型,结果将全部舍入。看看下面的例子:

DECLARE @floatValue FLOAT = 100 
DECLARE @intValue INT = 100 
DECLARE @divisor INT = 90 

SELECT @intValue/@divisor -- this will return 1 
SELECT @floatValue/@divisor -- this will return 1.11 

因此,要解决您的查询,你可以让你的变量FLOAT(或其他非整数数字类型),而不是数据类型。

+0

这里我越来越1.95,我想将其转换为2 – user3252014 2014-10-02 10:07:42

+0

我想圆到正面 – user3252014 2014-10-02 10:08:30

+0

然后[ROUND](http://msdn.microsoft .com/en-gb/library/ms175003.aspx)像这样的'ROUND(@result,0)' – DavidG 2014-10-02 10:08:50

0

警告:这是一个疯狂的猜测,因为您的问题缺乏基本信息(示例数据,涉及字段的数据类型,预期结果)。

我想你正在执行计算SQL方面依靠近似的数据类型字段,因此结果不是实际的结果,但数据类型支持的最接近的值。

如果您愿意分享正确的信息,就有可能了解这是否是问题并找到解决方案。

here你可以在sql server中找到一些关于近似数据类型的信息;还请查看ms documentation了解更多详情。