Vous n'avez même pas besoin de l'ID
paramètre.
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
- Tout ce qui se trouve au-dessus ou en dessous des positions d'origine et nouvelle n'a pas besoin d'être modifié.
- Tout le reste se déplace vers le haut ou vers le bas.
- Sauf l'élément d'origine, qui se déplace vers la nouvelle position.