我有一个错误的查询:
SET @SumDiff = @SitesSum - (select power(SUM(Sums),2)/@NumSites from @SiteSums)
SET @SE = power((@SumDiff/(@NumSites - 1)),0.5)/power(@NumSites,0.5)
此功能大部分时间都有效,但有时会出错
当我遇到问题时,这是值
SUM(Sums) = .01
如此平方= .001
@NumSites = 2
@SiteSum = 0
该部分的价值:
select power(@Sums,2)/@NumSites from @SiteSums
以5E-05
出现,与预期的值匹配,.00005
当我尝试设置@SE时,基本上找到(.00005 / 1)/ 2的平方根(1.4142135623731)的平方根。
应该像3.535533905932725。但是我收到了消息:
Msg 3623, Level 16, State 1, Line 306
An invalid floating point operation occurred.
.00005是否太小而无法在SQL中划分?我可以做演员吗?这并不总是使用小数,大多数是更大的数字。
答案 0 :(得分:1)
实际上,使用您的值:
SET @SumDiff = @SitesSum - (select power(SUM(Sums),2)/@NumSites from @SiteSums)
..导致@SumDiff
设置为-5E-05
,不 5E-05
。
所以当你这样做的时候:
power((@SumDiff/(@NumSites - 1)),0.5)
..你试图取一个负数的平方根,这个数字对于一个实数是无效的(未定义)。
ABS(..)
功能可以为您解决此问题:
SET @SE = power((ABS(@SumDiff)/(@NumSites - 1)),0.5)/power(@NumSites,0.5)