Microsoft SQL Server中的Identity(1,1)-是否有实际的理由曾经对种子/增量使用非1,1的值?

时间:2019-05-24 06:04:59

标签: sql-server

我正在教授Microsoft SQL Server课程,一个学生问是否有实际的原因,为什么我们会将自动增量设置为1,1以外的其他值(种子从1开始,以1为增量)。有实际的原因为什么我们将种子设置为更高的值或以非1的值递增?只要该值是唯一的就不重要吗?

如果没有实际原因,为什么我们可以选择在Microsoft SQL Server中为“身份”设置这些值?

2 个答案:

答案 0 :(得分:2)

如果您使用有符号整数并从1开始,则只使用了可用范围的一半。默认值实际上应该至少从数据类型开始,例如对于32位int为-20亿。

在某些情况下,您可能希望合并来自多个表的数据。在这种情况下,每个表应保留一个单独的ID范围。您可以使每个表以不同的数字开头以防止重叠。例如,从1开始,再从10亿开始。或者,您可以对一个(1,2)使用奇数,对另一个(2,2)使用偶数。

答案 1 :(得分:2)

具有许多可配置的起始值的实际原因:

  • 您可能希望插入一些具有众所周知ID的预定义记录,例如,维度或查找表中的MissingUnknownNot Applicable记录可能应该具有预定义ID。新行的ID应超出预定义数字范围。
  • 使用现有ID值加载或复制数据后,新记录应获得与导入数据不冲突的ID。最简单的方法是将起始ID设置在最大导入ID之上。
  • TRUNCATE TABLE重置IDENTITY值。为避免生成重复的ID,您需要使用DBCC CHECKIDENT重新设置表的种子并将当前值设置为1以外的其他值。

当然还有很多其他原因。