现有一张带有自定义序号的表,因为前端要对齐进行拖拽式或输入式排序,排序后要对整个表的序号重新计算
一张A表 内容如下,SortNum为自定义排序号:
ID | Name | SortNum |
1 | A | 0 |
2 | B | 2 |
3 | C | 1 |
4 | D | 3 |
当前端更新某个序号时,或在1 到 2 之间插入一个新的 2序号时,可以利用以下sql语句进行全刷新
declare @index int;
set @index = 2;//插入序号的位置
update A set SortNum = CASE WHEN @index = 0 THEN T.RowNum-1 else T.RowNum+@index end
from
(select ROW_NUMBER() OVER (order by SortNum ) as RowNum,ID from A where SortNum>=@index )T
where A.ID=T.ID and SortNum>=@index
其中index参数为插入序号的顺序,为了只更新后面的插入后的顺序,可以自行调整 除了新插入不刷新,其他都刷新
CASE WHEN @index = 0 THEN T.RowNum-1 else T.RowNum+@index end
Case when 是为了 在头部0位置插入行时,下标从0开始计算