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

时间:2012-11-20 13:37:02

标签: sql sql-server sql-server-2008

假设我有这张表,

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

现在,我的UI用户可以通过拖放更改订单。例如,他可以将项目d移动到项目的位置。那我的桌子就像是,

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

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

1 个答案:

答案 0 :(得分: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
  • 不需要更改原始位置和新位置之上或之下的任何内容。
  • 其他一切都在上下移动。
  • 除原始项目外,将移至新位置。