在 SQL Server (2005+) 中,我有一个与 Web 应用程序集成的完全正常工作的数据库。数据库由视图、键、索引、存储过程等组成。
我的大多数表(如果不是所有表)都具有自动递增主键。是否有一个 SQL 脚本来清理(重置)所有主要字段,以便它们看起来更好(1、2、3、4、5 6,...)?考虑到任何相关外键的一致性。
除了组织数据之外,没有真正的动机这样做。
在 SQL Server (2005+) 中,我有一个与 Web 应用程序集成的完全正常工作的数据库。数据库由视图、键、索引、存储过程等组成。
我的大多数表(如果不是所有表)都具有自动递增主键。是否有一个 SQL 脚本来清理(重置)所有主要字段,以便它们看起来更好(1、2、3、4、5 6,...)?考虑到任何相关外键的一致性。
除了组织数据之外,没有真正的动机这样做。
甚至不要考虑这样做。(是的,我知道我在大喊大叫。)这不会使数据库更有条理,更容易出现数据完整性问题,并且更有可能出现性能问题并在您进行外观更改时束缚用户对任何人都没有好处。随着时间的推移,数据库会出现缺口,这是一件好事,因为缺口来自已删除的记录和回滚的记录。当多个用户同时进行事务时,它有助于使数据库保持同步。它保持数据完整性。此外,除了您不喜欢它的外观外,您似乎没有这样做的要求。如果我确实被要求做一些如此愚蠢的事情,我会把它寄回去,除非法律要求改变。
您可以将您的 FK 设置为 UPDATE CASCADE,计算密钥需要如何更改并重新设置表的种子,但正如 HLGEM 指出的那样,没有充分的理由,也有很多充分的理由不这样做。如果您不愿意在单独的数据库上重新创建所有内容并从头开始移植,请不要打扰。在任何情况下,您确实需要一些令人信服的理由来更新 PK,尤其是基于身份的 PK。
您可以使用以下代码重新设定值:
DECLARE @MaxID INT
SELECT @MaxID = MAX(ID)
FROM <TableName>
DBCC CHECKIDENT('<TableName>', RESEED, @MaxID)