在我希望能够“移动”行的表中,有一个名为sortid的列,该列在插入时自动比最高值高一个值(在对我的sortid desc进行排序时,通过选择最高值很容易找到)。

但是我对于在ASP.NET页上的每一行的“向上/向下”操作中使用哪种查询感到有些困惑。我将使用哪种查询来选择要移动的行的“下”或“上”行?

谢谢

最佳答案

通过分别与之前或之后的记录交换记录来向上或向下移动记录。

如果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)

关于sql - 在数据库中移动行 'up and down'(SQL查询帮助),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4101513/

10-12 17:32