假设我的表中有100行,我的主键是从1自动递增1的整数。我合并我的数据并在行ID达到100后清除表,SQL Server将重用已删除的主键吗? / p>
由于主键递增1,如果以上问题的答案为否,那么一旦主键达到最大可能的数字,“ Int”将可容纳下一个插入内容?
答案 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
(或任何种子值)。