Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中自动增量主键的上限_Sql_Sql Server_Auto Increment - Fatal编程技术网

SQL Server中自动增量主键的上限

SQL Server中自动增量主键的上限,sql,sql-server,auto-increment,Sql,Sql Server,Auto Increment,SQL Server中自动增量主键的上限是多少? SQL Server自动增量主键达到其上限时会发生什么情况?这取决于数据类型。如果使用bigint,则不太可能溢出。即使是一个正常的整数也会给你几十亿行。我从未溢出,因此我无法告诉您如果溢出会发生什么。数据类型说明: BIGINT Integer data from -2^63 through 2^63 - 1 INT Integer data from -2^31 through 2^31 - 1 SMALLINT In

SQL Server中自动增量主键的上限是多少?
SQL Server自动增量主键达到其上限时会发生什么情况?

这取决于数据类型。如果使用bigint,则不太可能溢出。即使是一个正常的整数也会给你几十亿行。我从未溢出,因此我无法告诉您如果溢出会发生什么。

数据类型说明:

BIGINT    Integer data from -2^63 through 2^63 - 1

INT       Integer data from -2^31 through 2^31 - 1

SMALLINT  Integer data from -2^15 through 2^15 - 1

TINYINT   Integer data from 0     through 255

当您达到上限时,自动增量将转到下限。

Joel的回答是正确的,它是您使用的任何数据类型的上限

以下是其中两个的示例:

  • 内部:2^31-1(2147483647)
  • bigint:2^63-1(9223372036854775807)
事实上,我的工作已经达到了极限。实际误差为:

Msg 8115, Level 16, State 1, Line 1 Arithmetic overflow error converting IDENTITY to data type int. Arithmetic overflow occurred. Msg 8115,16级,状态1,第1行 将标识转换为数据类型int时出现算术溢出错误。 发生算术溢出。 有几个修复方法我可以想到的顶部关闭我的脑袋。数字1可能很难,也不太可能,数字2很容易,但可能会在代码库中引起问题

  • 如果标识列对您不重要(它不是外键等),那么您可以重新设置数据库的种子并重置标识列
  • 将您的标识列更改为更大的数字。例如,如果您溢出了一个int,请将您的标识列更改为一个大int。祝您好运溢出:)

  • 可能还有其他的修复方法,但没有一个简单的灵丹妙药。我只是希望这不会发生在一张桌子上,那是一堆关系的中心,因为如果发生了,你会很痛苦。这不是一个很难解决的问题,只是一个冗长乏味的问题。

    我来告诉你会发生什么。。。。我的数据停止插入到那个特定的表中。数据库仍然工作,但我发现数据丢失且不一致。经过一点研究,我找到了错误表,然后手动插入。误差与上述相同

    必须将列更改为BIGINT。在速度稍慢的服务器上的26GB数据库上,大约需要30分钟。在数据库的存档版本(150GB左右)上,花费了相当长的时间

    幸运的是,这个表没有太多的关系,所以痛苦很小。

    DBCC CHECKIDENT(SomeTable,RESEED,1)

    这会将表“SomeTable”上的标识重置为1


    不确定这是否是最好的方法。

    我使用int(11)如何?有多少数据?如果自动增量溢出,会发生什么情况?如果将数据类型的标识种子设置为最小负数,则可以将可存储在列中的值总数增加一倍。