【发布时间】:2015-08-10 16:41:45
【问题描述】:
我有一个简单的顺序表,例如:
ID | Name | Rank
=======+======+=====
327 | Ali | 1
-------+------+-----
846 | Sara | 2
-------+------+-----
657 | Dani | 3
-------+------+-----
...
ID 是主键并被索引,Rank 也被索引。我有几条这样的记录,我想要的是在SQL Server 的该表的记录之间插入一条记录,以保持其序列而不破坏排名。
例如,我将Sahar by 插入到上表中,排名为 2,这会导致排名更高,所以:
ID | Name | Rank
=======+======+=====
327 | Ali | 1
-------+------+-----
196 | Sahar| 2 ----> Inserted
-------+------+-----
846 | Sara | 3
-------+------+-----
657 | Dani | 4
-------+------+-----
...
我已经搜索并找到了一些解决方案,例如:
UPDATE TABLE table SET Rank += 1 WHERE Rank >= 2;
INSERT INTO TABLE (Rank, ...) VALUES (2, ...);
在这个answer,或者其他方法可能是this answer。以及我找到的其他一些答案,但所有这些答案都在运营中付出了沉重的代价。
我也可能需要更改一些Ranks 或交换两个Ranks 所以。
另一方面,我必须在 UPDATE、Delete 和 Insert Triggers 中进行操作,否则你会推荐。
- 是否有
identity(1,1)等机制或其他内置SQL Server中的服务旨在解决此问题? - 如果否,在性能方面的最佳方法是什么 操作?(答案应该有一个很好的解释 实施地点(触发器或...),索引问题,也可能 需要更改我的表定义)
谢谢。
【问题讨论】:
-
您的排名是基于其他可以让您重新计算的吗?如果没有,您可能只需要进行更新。看不到触发器如何在这方面为您提供帮助。
-
@JamesZ,不。排名的概念完全是唯一的,它仅取决于没有任何其他数据的人可以从中产生排名。更新应该在触发器中,因为我希望能够保证顺序或排名。
标签: sql-server database