清除/重置所有自动增量主键

时间:2013-07-16 18:00:54

标签: sql sql-server

在SQL Server(2005+)中,我有一个与Web应用程序集成的完全工作的数据库。 数据库由视图,键,索引,存储过程等组成。

大多数(如果不是全部)我的表都有自动递增主键。是否有一个SQL脚本来清理(重置)所有主要字段,以便它们看起来更好(1,2,3,4,5,6 ......)?考虑到任何相关外键的一致性。

除了组织数据外,没有真正的动机。

3 个答案:

答案 0 :(得分:4)

不要想到这样做。(是的,我知道我在大喊大叫。)这不会使数据库更有条理,更容易出现数据完整性问题和更多更容易出现性能问题,并在您进行对任何人都有好处的整容变化时占用用户。数据库随着时间的推移会有差距,这是一件好事,因为差距来自已删除的记录和回滚的记录。当多个用户同时进行事务时,它有助于使数据库保持同步。它保留了数据完整性。此外,除了您不喜欢它的外观之外,您似乎没有要求这样做。如果我确实要求做一些非常愚蠢的事情,我会把它发回去,除非法律要求改变。

答案 1 :(得分:1)

您可以将FK设置为​​UPDATE CASCADE,计算密钥需要更改的方式和reseed your tables,但正如HLGEM指出的那样,没有充分的理由和许多充分的理由不这样做。如果您不愿意在单独的数据库上重新创建所有内容并从头开始将其全部移植,请不要打扰。在任何情况下,你都需要一些令人信服的理由来更新PK,特别是基于身份的PK。

答案 2 :(得分:0)

您可以使用以下代码重新设置值:

DECLARE @MaxID INT
SELECT @MaxID = MAX(ID)
FROM <TableName>
DBCC CHECKIDENT('<TableName>', RESEED, @MaxID)