在表格中,我希望能够“移动”行,我有一个名为sortid的列,它在插入时自动是一个高于最高值的值(通过在排序我的sortid desc时选择最高值很容易找到).
但是我对我用于ASP.NET页面上每行的’up / down’操作的查询有点困惑.我将使用什么查询来选择要移动的行的“下方”或“上方”的行?
谢谢
解决方法
向上或向下移动记录是通过分别与之前或之后的记录交换来完成的.
如果SortId值始终是连续的(即,您不删除会导致间隙的记录),那么您只需添加或减去一个即可获得下一个或上一个记录.如果不保证记录是连续的,那么您必须找到要移动的记录旁边的记录.
要在以下之前找到记录的SortId:
select max(SortId) from TheTable where SortId < @SortId
要在以下内容后找到记录的SortId:
select min(SortId) from TheTable where SortId > @SortId
要交换这两个记录,您可以使用此技巧从另一个计算一个值:
update TheTable set SortId = @SortId1 + @SortId2 - SortId where SortId in (@SortId1,@SortId2)