Da du bruger SQL Server 2008, har du geography tilgængelig datatype, som er designet til netop denne type data:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
Giver
----------------------
538404.100197555
(1 row(s) affected)
Fortæller os, at det er omkring 538 km fra (nær) London til (nær) Edinburgh.
Naturligvis vil der være en del læring at gøre først, men når du først ved det, er det langt langt nemmere end at implementere din egen Haversine-beregning; plus du får MEGET funktionalitet.
Hvis du vil beholde din eksisterende datastruktur, kan du stadig bruge STDistance , ved at konstruere passende geography forekomster ved hjælp af Point metode:
DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=53.381538 set @orig_lng=-1.463526
DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);
SELECT *,
@orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326))
AS distance
--INTO #includeDistances
FROM #orig dest