Hallo Michael,
man könnte das mit einem BETWEEN Konstrukt lösen. Ungetestet aus der Hüfte geschossen:
SELECT id, name
FROM table
WHERE id BETWEEN IFNULL((SELECT MAX(id) from TABLE where ID<10), 10)
AND IFNULL((SELECT MIN(id) from TABLE where ID>10), 10)
ORDER BY id
Problem ist nur, wenn es den Vorgänger oder den Nachfolger nicht gibt - dann liefert der SELECT MAX bzw. SELECT MIN einen NULL Wert. Die IFNULL-Funktion ersetzt den durch die ID.
Heißt also: Du bekommst von dieser Query 0-3 Werte, je nachdem, ob es die ID, ihren Vorgänger oder ihren Nachfolger gibt, und musst dann im Programm prüfen, ob die ID des Satzes kleiner als, gleich wie oder größer als die gesuchte ID ist, damit Du weißt, welchen Satz Du im Zugriff hast.
Edit: Ich habe noch einen ORDER BY hinzugefügt, damit Du die Sätze auf jeden Fall aufsteigend bekommst.
Unterm Strich sind das auch 3 Abfragen. Sie finden nur alle in einer einzigen DB Abfrage statt und der SQL Server denkt sich dann vielleicht eine nette Optimierung dazu aus.
Rolf
--
sumpsi - posui - obstruxi