需求:給定 OrderId,找出其前一筆與後一筆 (依 OrderId 排序)。游標效能差,本文提供兩種集合式寫法並比較效能。
Northwind Orders 表,主鍵 OrderId。
DECLARE @TargetOrder INT = 10330
SELECT * FROM Orders
WHERE OrderId = (SELECT MAX(OrderId) FROM Orders WHERE OrderId < @TargetOrder)
OR OrderId = (SELECT MIN(OrderId) FROM Orders WHERE OrderId > @TargetOrder)
DECLARE @TargetOrder INT = 10330
SELECT TOP 3 *
FROM Orders
WHERE OrderId >= (SELECT MAX(OrderId) FROM Orders WHERE OrderId < @TargetOrder)
ORDER BY OrderId
WHERE OrderId >= NULL 導致無資料 (行為與方案一不同,需注意)。MIN/MAX、TOP 替代游標逐列邏輯。尋找相鄰列無需游標。方案一 (MIN/MAX) 語意清晰、邊界處理自然;方案二 (TOP) 效能略優但邊界行為不同。生產環境建議以方案一為主,效能敏感場景實測後採用方案二。