RESEED数据库上的标识列

时间:2010-11-12 13:30:36

标签: sql-server sql-server-2008 identity-column

我可以使用

吗?
DBCC CHECKIDENT(<table_name>, RESEED, value)

命令将标识列当前值重置为SQL Server 2008中的原始值?

如果是,这是否是没有任何缺点的正确方法? 如果没有,是否有其他方法可以做到这一点?

3 个答案:

答案 0 :(得分:10)

该值可以省略。 所以,如果你使用

DBCC CHECKIDENT (<table_name>, RESEED);

SQL Server根据已使用的数字将ident值设置为正确的下一个数字。 这是重新认识身份值的唯一方法。

答案 1 :(得分:8)

  

我可以使用DBCC CHECKIDENT命令将标识列当前值重置为SQL Server 2008中的原始值吗?

  

如果是,这是否是没有任何缺点的正确方法?

这是记录下来的方法。

可能存在的缺点:您最终可能会收到重复的IDENTITY值 - SQL Server无法保证它不会返回尚未使用的值。

E.g。如果您的IDENTITY当前为100,并且您将其重置为1,则可能迟早会产生一个已经在使用的值。

SQL Server中实现的IDENTITY不检查现有值或任何内容 - 它只生成序列号。这取决于您 - 尤其是如果您对RESEED执行IDENTITY以确保值不重复。

答案 2 :(得分:-1)

当且仅当feild是主键并且引用任何其他表中的任何外键时,它有一个很大的缺点。重新播种有助于获取具有该字段索引的事务表中的记录。