在数据库中上下移动行(SQL查询帮助)

Chr*_*ris 5 sql

在表格中我希望能够"移动"行,我有一个名为sortid的列,它在插入时自动是一个高于最高值的值(通过在排序我的sortid desc时选择最高值很容易找到).

但是我对我用于ASP.NET页面上每行的'up/down'操作的查询有点困惑.我将使用什么查询来选择要移动的行的"下方"或"上方"的行?

谢谢

Guf*_*ffa 8

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

如果SortId值始终是连续的(即您不删除会导致间隙的记录),那么您只需添加或减去一个即可获得下一个或上一个记录.如果不保证记录是连续的,那么您必须找到要移动的记录旁边的记录.

要查找SortId之前的记录:

select max(SortId) from TheTable where SortId < @SortId
Run Code Online (Sandbox Code Playgroud)

要在SortId以下后找到记录:

select min(SortId) from TheTable where SortId > @SortId
Run Code Online (Sandbox Code Playgroud)

要交换这两个记录,您可以使用此技巧从另一个计算一个值:

update TheTable
set SortId = @SortId1 + @SortId2 - SortId
where SortId in (@SortId1, @SortId2)
Run Code Online (Sandbox Code Playgroud)