ms sql server将在自动增量模式下重用已删除的主键吗?

时间:2018-08-03 12:44:44

标签: sql-server limit sqldatatypes

假设我的表中有100行,我的主键是从1自动递增1的整数。我合并我的数据并在行ID达到100后清除表,SQL Server将重用已删除的主键吗? / p>

由于主键递增1,如果以上问题的答案为否,那么一旦主键达到最大可能的数字,“ Int”将可容纳下一个插入内容?

3 个答案:

答案 0 :(得分:1)

MSSQL不会重复使用通过DELETE删除的主键(我假设您正在谈论的是identity增量。)如果您TRUNCATE表,它将将重置种子并重新使用它们。

如果您超过INT的最大值,则确实将无法进入下一行。您可以将INT列转换为BIGINT来避免这种情况。

BIGINT的最大值为:9,223,372,036,854,775,807,而INT的上限为2,147,483,647,但请注意。您也可以使用这些负值!

您可以在此处了解有关这些上限的信息:https://docs.microsoft.com/fr-fr/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql?view=sql-server-2017

答案 1 :(得分:0)

否,SQL Server将不会重复使用ID。如果您有100条ID为1至100的记录并将其全部删除,则下一行插入的ID为101。

但是,如果要在删除后从1开始,则可以使用以下命令:

DBCC CHECKIDENT('TableName', RESEED, 0)

它将重新设定您的身份,并使其从1重新开始。

答案 2 :(得分:0)

这取决于您的意思

  

我...一旦行ID达到100,就清除表格

如果您要发出DELETE语句,则否,标识列将在下一次插入时发出101

如果要发布TRUNCATE TABLE语句,则可以,该表将在下一次插入时重新种子到1(或任何种子值)。