Je hebt niet eens de ID
nodig parameter.
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
- Alles boven of onder de oorspronkelijke en nieuwe posities hoeft niet te worden gewijzigd.
- Al het andere gaat één omhoog of omlaag.
- Behalve het originele item, dat naar de nieuwe positie wordt verplaatst.