У меня есть хранимая процедура, которая вычисляет расстояние между двумя парами координат в виде числа с плавающей запятой. Я пытаюсь использовать это для фильтрации списка значений, но получаю арифметическую ошибку переполнения. Запрос:
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
также пытались преобразовать результат в десятичную без эффекта.