![]() |
1
13
达到最大值时会出现溢出错误。
. 如果使用的bigint数据类型的最大值为
您将收到的错误消息如下:
据我所知,MS SQL不提供填补标识空白的功能,因此您要么自己完成此操作,要么更改标识列的数据类型。 除此之外,还可以将起始值设置为最小的负数,以获得更大范围的值。 |
![]() |
2
1
它不会填补空白。相反,插入将失败,除非您更改列的定义,以便删除标识并找到其他填充间隙的方法,或者增大大小(从int变为bigint),或者更改数据类型(从int变为decimal),以便提供更多标识值。 |
![]() |
3
1
在解决问题之前,您将无法插入新行,并将收到上面列出的错误消息。你可以通过多种方式做到这一点。如果仍然有数据,并且使用的ID都低于最大值,则必须更改数据类型。如果定期清除数据,并且您有一个很大的空白将无法使用,则可以将标识号重新设置为该空白中的最小数字。例如,在上一个作业中,我们正在记录事务。我们每个月大概有4000-5000万,但是我们清除了所有超过6个月的东西,所以每隔几年,身份就会接近20亿,但是我们没有低于15亿的身份证,所以我们会重新回到0。同样,这两种方法都不适用于您,您必须找到不同的解决方案。 |
![]() |
4
0
如果标识列是整数,则最大值为2147483647。如果超过这个值,就会出现溢出错误。 如果您认为这是一个风险,只需使用bigint数据类型,它就可以提供9223372036854775807。无法想象有这么多行的数据库表。 进一步讨论 here . (与上面提到的XSL链接相同)。 |
![]() |
5
0
如果确实达到了标识列的最大数目,则可以将该表中的数据移动到具有较大标识列类型的辅助表中,并将新标识值的起始值指定为前一类型的最大值。新的标识值将从此处继续。 |
![]() |
6
0
如果您经常删除“旧值”,只需使用重置种子 DBCC CHECKIDENT('MyTable',重设,0); |