SQL Server 2008: что произошло, если идентификатор превысил максимальное значение int? - PullRequest
1 голос
/ 24 января 2011

Представьте, что у нас есть таблица:

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

Мы должны вставить в таблицу много строк.

Кто-нибудь знает, что произойдет, если сгенерированное значение идентичности выходит за пределы максимального целочисленного значения (2 ^ 63-1)?

Ответы [ 3 ]

5 голосов
/ 24 января 2011

Пример

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.
4 голосов
/ 24 января 2011

Произойдет ошибка, и вставка будет потеряна.

Сообщение 8115, Уровень 16, Состояние 1, Строка 2 Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int.Произошло арифметическое переполнение.

1 голос
/ 24 января 2011

Вы можете легко проверить это с очень маленьким столбцом идентификаторов, например decimal(1,0):

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

Как говорит Одед, это печатает:

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
...