假设我们有一张桌子:
create table MYTABLE (
id int IDENTITY(1,1)
,name varchar(10)
)
我们必须在表中插入很多行。
有谁知道当生成的标识值超过最大整数值 (2^63-1) 时会发生什么?
假设我们有一张桌子:
create table MYTABLE (
id int IDENTITY(1,1)
,name varchar(10)
)
我们必须在表中插入很多行。
有谁知道当生成的标识值超过最大整数值 (2^63-1) 时会发生什么?
一个例子
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.
将发生错误并且插入将丢失。
消息 8115,级别 16,状态 1,第 2 行将 IDENTITY 转换为数据类型 int 的算术溢出错误。发生算术溢出。
您可以使用非常小的标识列轻松地对此进行测试,例如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