无法在删除时更新序列

时间:2012-12-03 03:36:30

标签: sql-server-2008

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。

1
2
3
4

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

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

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

1 个答案:

答案 0 :(得分:2)

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

也就是说,您可以使用类似的东西来处理单个删除:

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

在具有多个用户同时更新数据库的典型系统中,这种事情往往会破裂。典型的系统也有外国参考,需要更新等等......