我正在使用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没有得到正确的值?我的存储过程出了什么问题
答案 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