我正在研究 SQL Server 2008 中的存储过程,用于重置数据库表中的整数列。此整数列存储或保留项目行的显示顺序。用户能够以特定的排序顺序拖放项目,我们使用这个“Order Rank Integer”将该顺序保存在数据库表中。
检索数据时,项目的显示查询始终附加“ORDER BY OrderRankInt”,以便用户按照他们之前指定的顺序查看项目。
问题是这个整数列在表项重新排序后收集了很多重复值。因此...
Table
--------
Name | OrderRankInt
a | 1
b | 2
c | 3
d | 4
e | 5
f | 6
在用户进行大量重新排序后,变成......
Table
--------
Name | OrderRankInt
a | 1
b | 2
c | 2
d | 2
e | 2
f | 6
这些重复主要是因为插入和用户指定的订单号。我们并没有试图防止重复的订单排名,但我们想要一种方法来“修复”项目插入/修改时的表格。
有没有办法可以使用单个 UPDATE 查询重置OrderRankInt列?还是我需要使用光标?该游标的语法是什么样的?
谢谢,凯文
编辑
使用Remus Rusanu解决方案进行更新。谢谢!!
CREATE PROCEDURE EPC_FixTableOrder
@sectionId int = 0
AS
BEGIN
-- "Common Table Expression" to append a 'Row Number' to the table
WITH tempTable AS
(
SELECT OrderRankInt, ROW_NUMBER() OVER (ORDER BY OrderRankInt) AS rn
FROM dbo.[Table]
WHERE sectionId = @sectionId -- Fix for a specified section
)
UPDATE tempTable
SET OrderRankInt = rn; -- Set the Order number to the row number via CTE
END
GO