Существует ли максимум? SQL Server начнет бросать SqlExceptions, когда максимум будет достигнут? Как Вы решаете его? (архивация?)
От ресурсов SQL Server I видят, что максимум 2,147,483,647. Я далек от этого, но мне было просто любопытно.
вы можете увидеть ошибку, используя этот небольшой пример
use tempdb;
if OBJECT_ID('dbo.test', 'U') is not null drop table dbo.test
create table test
( id int identity not null,
dummy int not null )
go
SET IDENTITY_INSERT dbo.test ON
insert into test(id, dummy) values(2147483647, 1)
SET IDENTITY_INSERT dbo.test OFF
insert into test(dummy) values(1)
ошибка:
(1 row(s) affected)
Msg 8115, Level 16, State 1, Line 8
Arithmetic overflow error converting IDENTITY to data type int.
Arithmetic overflow occurred.
Максимальное значение для int
действительно равно 2 147 483 647.
Если вы попытаетесь превысить максимальный размер, вы получите эту ошибку:
Msg 8115, Level 16, State 1, Line 2
Arithmetic overflow error converting IDENTITY to data type int.
Arithmetic overflow occurred.
Если этот размер недостаточно велик, используйте bigint
(9,223,372,036,854,775,807)
Максимум определяется типом данных, а не модификатором IDENTITY
. Для столбца INT
вы уже выяснили максимум. Если вам нужен тип данных с большим диапазоном, то BIGINT
- очевидный выбор, и его вполне можно пометить IDENTITY
.
TINYINT
: от 0 до 255SMALLINT
: от -32768 до 32767INT
: от -2147483648 до 2147483647BIGINT
: -9223372036854775808 - 9223372036854775807Я бы ожидал, что при попытке вставить строки после достижения максимума будет возникать ошибка, поскольку реализация IDENTITY
все равно будет пытаться увеличиваться при каждой вставке.
Хотя, конечно, можно архивировать строки в другое хранилище данных и начать повторное использование идентификаторов (DBCC CHECKIDENT (jobs, RESEED, 0)
сбросит счетчик), это не то, что SQL Server предлагает из коробки. Вам придется самостоятельно реализовать логику для этого, а также учесть, какие проблемы может принести повторное использование идентификаторов вашему приложению. Например, для веб-приложения, будут ли старые URL внезапно указывать на новые документы или возвращать 404 ошибку?