SQL Server 2008:如果身份超过int的最大值,会发生什么?

时间:2011-01-24 10:43:42

标签: sql-server sql-server-2008 identity identity-column

想象一下,我们有一张桌子:

create table MYTABLE (
 id int IDENTITY(1,1)
,name varchar(10)
)

我们必须在表格中插入很多行。

有人知道当生成的身份值超过最大整数值(2 ^ 63-1)时会发生什么?

3 个答案:

答案 0 :(得分:5)

一个例子

create table dbo.MYTABLE (
 id tinyint IDENTITY(254,1)
,name varchar(10)
)
GO
INSERT dbo.MYTABLE (name) VALUES ('row 254')
GO
INSERT dbo.MYTABLE (name) VALUES ('row 255')
GO
INSERT dbo.MYTABLE (name) VALUES ('broke')
GO

给出

Msg 8115, Level 16, State 1, Line 1
Arithmetic overflow error converting IDENTITY to data type tinyint.
Arithmetic overflow occurred.

答案 1 :(得分:4)

将发生错误,插入将丢失。

  

Msg 8115,Level 16,State 1,Line 2   将IDENTITY转换为数据类型int的算术溢出错误。   发生算术溢出。

答案 2 :(得分:1)

您可以使用非常小的标识列轻松测试此内容,例如decimal(1,0)

create table IdentityOverflow (id decimal(1,0) identity)
while 1=1
    insert IdentityOverflow default values

就像Oded所说,这会打印出来:

Arithmetic overflow error converting IDENTITY to data type decimal.

即使是最大的整数也是如此:

create table IdentityOverflow (
    id decimal(38,0) identity(1,10000000000000000000000000000000000000))
while 1=1
    insert IdentityOverflow default values