-1
UPDATE dbo.ControlBrandMapping
SET Sequence = SUBQUERY.SORTORDER
FROM 
    (SELECT 
         Sequence, ROW_NUMBER() OVER (ORDER BY Sequence) AS SORTORDER 
     FROM ControlBrandMapping) SUBQUERY
WHERE ControlBrandMapping.Sequence = SUBQUERY.Sequence`

我在这里要做的是在删除时我正在尝试更新行序列。在用户屏幕上,我有一个 tabelDnD,它在拖动时会重新排列序列。

假设顺序是:

1
2
3
4
5

现在可以说我删除了第 3 行。我要 4 变成 3, 5 变成 4。

IE

1
2
3
4

它给了我奇怪的序列。但与此同时,当我再次使用 tabelDnD 读取行时,它就可以了。我相信我上面提到的查询存在一些问题。

注意:它不是一IDENTITY列。它不是我表中唯一的列。

请帮助解决这个问题。谢谢。

4

1 回答 1

2

您确定需要重新编号所有后续行吗?这听起来像是一个演示问题,即您想向人类显示一个整齐的数字列表。这不需要在数据库中存储“漂亮”的数字。

也就是说,您可以使用类似这样的方法来处理单个删除:

 update dbo.ControlBrandMapping
   set Sequence = Sequence - 1
   where Sequence > @DeletedSequence

这种事情往往会在具有多个用户同时更新数据库的典型系统中解开。典型的系统也有需要更新的外部引用等等......。

于 2012-12-03T03:58:32.563 回答