私は間違いなくサーバー上でこれをやろうとします.1つの数値を計算するために400,000行をドラッグしないようにしてください。
また、可能であればにカーソルが表示されないようにしています。カーソルはSQL Serverの悪夢であり、絶対に避けてください。
あなたのケースでは、詳細なテーブル構造を知らずに、あなたは間違いなくそうすることができます。最初の要素から始まり、総距離が0.0の再帰的CTE(Common Table Expression)を計算し、他のすべてのウェイポイントを再帰的に合計し、ポイント(x + 1)とポイントxの間の距離を計算し、前の合計。
最後に、すべてのウェイポイント、任意の2つのウェイポイント間のすべての距離、および旅程全体の合計距離を示すCTEが必要です。
CTEのようなものであろうと:
;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
サーバー**で**を計算するのが最も速いですが**カーソルなしで** ..... –
@marc_s:カーソルなしで各行に距離を追加する方法はありますか? – mabstrei
私の反応を見てください - 私たちには詳細がたくさんありませんので、私は非常に一般化されたアイデアしか提供できません.... –