1

假设我有这张桌子,

 ID         Name       Order
======== ========  =========
 1           d          1
 2           g          2
 3           b          3
 4           f          4
 5           a          5

现在,从我的 UI 用户可以通过拖放更改顺序。例如,他可以将项目 d 移动到项目 a 位置。然后我的桌子看起来像,

 ID         Name       Order
======== ========  =========
 2           g          1
 3           b          2
 4           f          3
 1           d          4
 5           a          5

谁能告诉我SQL?我输入了 ID、OldOrder 和 NewOrder。

4

1 回答 1

6

你甚至不需要ID参数。

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
  • 不需要更改原始位置和新位置之上或之下的任何内容。
  • 其他一切都向上或向下移动一个。
  • 除了原始项目,移动到新位置。
于 2012-11-20T13:42:29.693 回答