Sql server sql server divident未获得正确的结果

Sql server sql server divident未获得正确的结果,sql-server,vb.net,stored-procedures,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代码) 这是我的存储过程部分,我在sql server中做同样的事情,但我的q1没有得到正确的值?我的存储过程有什么问题?警告:这是一个猜测,因为您的问题缺少基本信息(

我正在使用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代码)


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

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

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

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


您可以在sql server中找到一些关于近似数据类型的信息;还要查看更多详细信息。

当您使用
INT
datatype时,结果将全部四舍五入。举以下例子:

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

因此,为了修复查询,您可以将变量的数据类型改为浮动(或另一种非整数数字类型)。

您缺少if块的“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

预期值应该是多少?我必须得到q1在存储过程中也是2。代码我得到的是正确的。但是在sql中,我得到1为什么存储过程的神奇值是1440而不是使用
@modVal
?sql中变量的数据类型是什么?如果它们都是
INT
你会得到很多舍入。我的@q1变量是整数在我得到1.95之前,我想把它转换成2i想舍入到正数,然后像这样舍入最终值(@result,0)
set @PT1=@PT-@LT
if (@PT1>@modvAL)
     set @q1=@PT1 / 1440
else
     set @q1=1