sql server dividend没有得到正确的结果

时间:2014-10-02 09:53:26

标签: sql-server vb.net stored-procedures

我正在使用Windows应用程序,我在vb.net中有这样的代码:

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

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

 set @PT1=@PT-@LT
if @PT1>@modvAL
  begin
  set @q1=@PT1 / 1440
 else
  begin
  set @q1=1
  end

这是我的存储过程部分,这里在sql server中做同样的事情,但我的q1没有得到正确的值?我的存储过程出了什么问题

3 个答案:

答案 0 :(得分: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(或其他非整数数字类型)的数据类型。

答案 1 :(得分:0)

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

我假设您正在执行依赖于近似数据类型字段的计算sql端,因此结果不是实际结果,而是数据类型支持的最接近的值。

如果这是问题并且找到解决方案,您是否应该分享正确的信息?

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

答案 2 :(得分:0)

你错过了if block的'end'。

set @PT1=@PT-@LT
if @PT1>@modvAL
  begin
     set @q1=@PT1 / 1440
  end //missing
else
  begin
     set @q1=1
  end

使用单个语句,您可以使用if-else而不使用块。

set @PT1=@PT-@LT
if (@PT1>@modvAL)
     set @q1=@PT1 / 1440
else
     set @q1=1