【发布时间】:2011-06-11 14:32:44
【问题描述】:
我有一个存储过程,它将两个坐标对之间的距离计算为浮点数。我正在尝试使用它来过滤值列表,但出现算术溢出错误。查询是:
SELECT * FROM Housing h WHERE convert(float, dbo.CalculateDistance(35, -94, h.Latitude, h.Longitude)) <= 30.0
哪些错误:
消息 8115,级别 16,状态 6,第 1 行算术溢出错误 将浮点数转换为数字数据类型。
存储过程供参考:
CREATE FUNCTION [dbo].[CalculateDistance]
(@Longitude1 DECIMAL(8,5),
@Latitude1 DECIMAL(8,5),
@Longitude2 DECIMAL(8,5),
@Latitude2 DECIMAL(8,5))
RETURNS FLOAT
AS
BEGIN
DECLARE @Temp FLOAT
SET @Temp = SIN(@Latitude1/57.2957795130823) * SIN(@Latitude2/57.2957795130823) + COS(@Latitude1/57.2957795130823) * COS(@Latitude2/57.2957795130823) * COS(@Longitude2/57.2957795130823 - @Longitude1/57.2957795130823)
IF @Temp > 1
SET @Temp = 1
ELSE IF @Temp < -1
SET @Temp = -1
RETURN (3958.75586574 * ACOS(@Temp) )
END
我们也尝试将结果转换为十进制,但没有任何效果。
【问题讨论】:
-
存储过程单独运行是否有效?
-
它说它正在将浮点数转换为数字。除了可能在格式化结果时选择本身之外,我看不到任何地方应该发生这种情况?
标签: sql sql-server math