生成更新SQL以更改项的顺序?

use*_*567 1 sql sql-server sql-server-2008

假设我有这张桌子,

 ID         Name       Order
======== ========  =========
 1           d          1
 2           g          2
 3           b          3
 4           f          4
 5           a          5
Run Code Online (Sandbox Code Playgroud)

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

 ID         Name       Order
======== ========  =========
 2           g          1
 3           b          2
 4           f          3
 1           d          4
 5           a          5
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我SQL吗?我输入了ID,OldOrder和NewOrder.

Mat*_*lie 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
Run Code Online (Sandbox Code Playgroud)
  • 不需要更改原始位置和新位置之上或之下的任何内容.
  • 其他一切都向上或向下移动一个.
  • 除了原始项目,它移动到新位置.