Proverei sicuramente a farlo sul server: prova a evitare di trascinare verso il basso 400.000 righe solo per calcolare un singolo numero (alla fine).
Inoltre: proverei a farlo senza un cursore, se possibile. I cursori sono un incubo su SQL Server - dovrebbero essere evitati a tutti i costi.
Nel tuo caso, non conoscendo la tua struttura dettagliata della tabella, potresti sicuramente fare ad es. un CTE ricorsivo (Common Table Expression) che inizia con il primo elemento e una distanza totale di 0.0, e quindi ricorsivamente riassume tutti gli altri punti modo, calcolando la distanza tra il punto (x + 1) e il punto x, e sommando fino al totale precedente.
Alla fine, si dovrebbe avere un CTE che mostra tutti i punti di tragitto, tutte le distanze tra due waypoint e la distanza totale dell'intero viaggio.
Questo CTE sarebbe qualcosa di simile:
;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
fonte
2011-01-27 14:20:44
Il più veloce sarebbe quello di calcolarlo ** sul server **, ma ** senza un cursore ** ..... –
@marc_s: C'è un modo per aggiungere una distanza per ogni riga senza un cursore? – mabstrei
Vedere la mia risposta: non ci fornisci molti dettagli, quindi posso solo fornire un'idea molto generalizzata ... –