我有一个包含标识列的表
[Id] int IDENTITY(1, 1) NOT NULL在添加/删除一些行之后,我以Id值中的间隙结束:
Id Name
---------
1 Tom
2 Bill
4 Kate有没有一种简单的方法将这些值压缩为
Id Name
---------
1 Tom
2 Bill
3 Kate发布于 2011-01-05 02:52:20
我认为创建具有相同模式的第二个表非常容易,导入第一个表中的所有数据(当然,除了identity列;让第二个表开始重新编号),删除第一个表,并将第二个表重命名为原始名称。
如果您有大量的FK关系要与其他表等重新构建,那么易用性可能会受到质疑。
发布于 2011-01-05 02:56:15
强烈建议您保持标识值不变。
如果此ID列用作另一个表上的外键,更改它们将很快变得非常复杂。
如果有一些业务逻辑中它们必须是连续的,那么添加一个新的列ID_Display,您可以在其中使用ROW_NUMBER()更新它们,并为最终用户保留它们。我从不让最终用户看到和/或指示我如何创建/填充/存储数据,如果他们对ID感到困扰,那么就向他们显示一些看起来像ID但不是FK或PK的其他数据。
发布于 2011-01-05 02:49:09
据我所知,你唯一能做的就是手动更新这些值,把Identity insert变成on..but,你真的应该避免在first place..also中做这样的事情,如果你截断这个表,它就不会有那些间隙了。
https://stackoverflow.com/questions/4597183
复制相似问题