1

假设我们有一张桌子:

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

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

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

4

3 回答 3

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.
于 2011-01-24T10:51:51.330 回答
4

将发生错误并且插入将丢失。

消息 8115,级别 16,状态 1,第 2 行将 IDENTITY 转换为数据类型 int 的算术溢出错误。发生算术溢出。

于 2011-01-24T10:46:07.180 回答
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
于 2011-01-24T10:51:33.433 回答