Definitivamente intentaré hacer esto en el servidor; intente evitar arrastrar hacia abajo 400,000 filas solo para calcular un solo número (al final).
También: Intentaré hacerlo sin un cursor, si es posible. Los cursores son una pesadilla en SQL Server; deben evitarse a toda costa.
En su caso, sin conocer la estructura detallada de su tabla, definitivamente podría hacerlo, p. un CTE recursivo (Expresión común de tabla) que comienza con el primer elemento y una distancia total de 0.0, y luego resume recursivamente todos los puntos restantes, calculando la distancia entre el punto (x + 1) y el punto x, y sumando al total anterior.
Al final, debe tener un CTE que muestre todos los puntos de paso, todas las distancias entre dos puntos intermedios y la distancia total de todo el recorrido.
Eso CTE sería algo así como:
;WITH Waypoints AS
(
-- anchor your query
SELECT
WaypointID, PrevWaypointID, Long, Lat, 0.0 as Distance, 0.0 as SumOfDistance
FROM
dbo.Waypoint
WHERE
PrevWaypointID IS NULL -- or some other condition
UNION -- recurse
SELECT
WaypointID, Long, Lat,
dbo.GetDistanceBetween(wp.WaypointID, pts.WaypointID), -- distance
pts.SumOfDistance + dbo.GetDistanceBetween(wp.WaypointID, pts.WaypointID) -- sum
FROM
dbo.Waypoint wp
INNER JOIN
Waypoints pts ON wp.PrevWaypointID = pts.WaypointID
WHERE
(some condition; ID = 1 or PreviousWaypointID IS NULL or something)
)
SELECT * FROM Waypoints
Lo más rápido sería calcular ** en el servidor **, pero ** sin un cursor ** ..... –
@marc_s: ¿Hay alguna manera de agregar una distancia para cada fila sin un cursor? – mabstrei
Vea mi respuesta: no nos está dando muchos detalles, por lo que solo puedo brindarle una idea muy generalizada ... –