Sql server 重新设定标识列的种子数等于记录计数

Sql server 重新设定标识列的种子数等于记录计数,sql-server,Sql Server,我们所有的表中都有int标识列。我们还将进行合并复制以支持应用程序的脱机模式,所以我们必须处理标识范围。 尽管记录的数量接近20亿条,但我们的整数值(最大值约为19亿条)已经快用完了,事实上,最大值只有200多万条。这是多年来发生的,因为客户的重新订阅以及每次这样做都会获得新的范围。 有没有一种更简单的方法(至少是停机时间),我可以将这个列压缩到200万个值?为什么不把数据类型改为BigIt,你可以很长时间忘记它,或者你可以考虑使用负数吗?将其重新设定为-1并执行步骤-1。使用bigint或un

我们所有的表中都有int标识列。我们还将进行合并复制以支持应用程序的脱机模式,所以我们必须处理标识范围。 尽管记录的数量接近20亿条,但我们的整数值(最大值约为19亿条)已经快用完了,事实上,最大值只有200多万条。这是多年来发生的,因为客户的重新订阅以及每次这样做都会获得新的范围。
有没有一种更简单的方法(至少是停机时间),我可以将这个列压缩到200万个值?

为什么不把数据类型改为BigIt,你可以很长时间忘记它,或者你可以考虑使用负数吗?将其重新设定为-1并执行步骤-1。使用bigint或uniqueidenfier和newsequentialid()是其他选项。但是INT对于下一年的数据量来说应该足够了,所以首先尝试探索保持它为int的选项。如果你将它重置为当前行计数,那么你很可能会根据我怀疑你需要避免的问题得到重复。如果将其设置为小于当前最大值的值,则可能会发生碰撞…野兽的本性。不确定将数据类型更改为uniqueidentifier会有什么帮助。您必须更改所有引用此的外部表,这可能会变得非常糟糕。请记住,标识并不关心表中有多少行,它是尝试插入的次数的计数(插入失败时,它也会递增)有差距是正常的和预期的。为什么不把数据类型改为BigIt,你可以很长时间忘记它,或者你可以考虑使用负数吗?将其重新设定为-1并执行步骤-1。使用bigint或uniqueidenfier和newsequentialid()是其他选项。但是INT对于下一年的数据量来说应该足够了,所以首先尝试探索保持它为int的选项。如果你将它重置为当前行计数,那么你很可能会根据我怀疑你需要避免的问题得到重复。如果将其设置为小于当前最大值的值,则可能会发生碰撞…野兽的本性。不确定将数据类型更改为uniqueidentifier会有什么帮助。您必须更改所有引用此的外部表,这可能会变得非常糟糕。请记住,标识并不关心表中有多少行,它是尝试插入的数量的计数(插入失败时,它也会增加),并且存在间隙是正常的,也是意料之中的。