搜索长度和纬度时发生无效的浮点运算

时间:2015-10-28 10:37:14

标签: sql sql-server stored-procedures precision

我在SQL中使用此过程通过纬度和经度查找Bing地图上的近位置。

程序返回

  

发生了无效的浮点运算

当我搜索@latitude = 7025045,@ longitude = 702342

这是我的程序:

        ALTER PROCEDURE [dbo].[UppdragNearByUppdrag3]
    @latitude int, 
@longitude int

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT  ARUppdrag.cUppdrNr AS UppdrNr, a.iLarmNorthing AS   LarmKoordinatNorthing, a.iLarmEasting AS LarmKoordinatEasting
FROM     Trakt AS a INNER JOIN
          ARUppdrag ON a.iTraktID = ARUppdrag.iTraktID 

WHERE a.iLarmNorthing <> 0  and a.iLarmEasting <> 0 And   (ACOS(SIN(a.iLarmNorthing * 0.0175) * SIN(@latitude * 0.0175) + COS(a.iLarmNorthing * 0.0175) * COS(@latitude * 0.0175) *
COS(@longitude * 0.0175 - a.iLarmEasting * 0.0175)) * 3959 <= 100)


END

1 个答案:

答案 0 :(得分:0)

以高精度将@longitude和@latitude转换为float或decimal。因为它们是INT,当它们作为数学语句中的第一个变量出现时,会有一个隐式类型转换为INT,然后存在无效的浮点操作。