Você nem precisa do
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
- Qualquer coisa acima ou abaixo das posições originais e novas não precisam ser alteradas.
- Todo o resto sobe ou desce um.
- Exceto o item original, que se move para a nova posição.