考虑一个包含大约 9,000,000 行的表。每行都有一个基于 int 的“ID”IDENT 列,其值在每次插入时自动递增。该表经历了很多“变动”,也就是说,在一天中有大量行被删除并添加到该表中。尽管总行数并未以特别高的速度增长,但可以想象,分配给各行的数字 ID 值可能会在未来几年的某个时候达到最大 ID 值 (2^32 ?)。
是否有一些 SQL 代码可以运行以重置表所有行中的所有 ID?理想情况下,如果表包含“x”行数,则将分配 1 到“x”之间的 ID。然后我将身份生成器重新播种到“x+1”。
ID 列不是任何其他表的外键。
这个过程只需要每隔几年执行一次,所以我不介意在必要时在单用户环境中运行查询。
我无法将 ID 列的类型更改为 long 或 varchar 来解决问题。显然有遗留代码依赖于 32 位整数的值。
我正在使用 SQL Server 2008。
好吧,那么。