想象一下,我们有一张桌子:
create table MYTABLE (
id int IDENTITY(1,1)
,name varchar(10)
)
我们必须在表格中插入很多行。
有人知道当生成的身份值超过最大整数值(2 ^ 63-1)时会发生什么?
答案 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