如何在删除SQL Server中的记录后重新排序记录(SortOrder列)?

时间:2010-06-20 18:05:45

标签: sql sql-server

我想知道删除记录后重新排序记录的最有效方法是什么。基本上我有类似(ItemID,SortOrder)的东西。因此,当我删除一个项目时,SortOrder列将不再是增量。我想重新编号排序顺序,以便数字再次增量。

我想也许我可以用RANK功能做到这一点......但我不太确定该怎么做。

2 个答案:

答案 0 :(得分:4)

如果你正在使用支持T-SQL的东西(即不是精简版),那么这应该可行。

假设您的表名为Item且订单目前是增量的(无间隙),

declare @SortOrder int

select @SortOrder = SortOrder from Item where ItemID = @ItemID

update Item set SortOrder = SortOrder - 1 where SortOrder > @SortOrder

delete Item where ItemID = @ItemID

答案 1 :(得分:1)

假设这是一个定期整理,那么以下将有助于“修复”所有差距。

一些测试数据

SELECT *
INTO   #TEST
FROM   (SELECT 1, 1, 1
        UNION ALL 
        SELECT 2, 1, 3
        UNION ALL 
        SELECT 3, 1, 4
        UNION ALL
        SELECT 4, 2, 2
        UNION ALL 
        SELECT 5, 2, 3
        UNION ALL 
        SELECT 6, 2, 4)H(PK, ItemID, SortOrder)

代码

WITH Tidied
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY ItemID 
                                       ORDER BY SortOrder) AS NewSortOrder
         FROM   #TEST)
UPDATE Tidied
SET    SortOrder = NewSortOrder