Ni siquiera necesitas el ID
parámetro.
UPDATE
yourTable
SET
Order = (CASE WHEN Order = @oldOrder THEN @newOrder
WHEN @newOrder > @oldOrder THEN Order - 1
ELSE Order + 1 END)
WHERE
Order BETWEEN @oldOrder AND @newOrder
OR Order BETWEEN @newOrder AND @oldOrder
- No es necesario cambiar nada por encima o por debajo de las posiciones original y nueva.
- Todo lo demás se mueve hacia arriba o hacia abajo.
- Excepto el elemento original, que se mueve a la nueva posición.