Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Переполнение счетчика первичного ключа  [new]
vasiliusis
Member

Откуда:
Сообщений: 58
Здравсвуйте. Такой вопрос:
Что делает СУБД (в частности MS Sql Server), если переполнился счетчик для первичного ключа?

К примеру, тип ключа bigint,
максимальное текущее значение ПК записи в таблице - 0xffffffff (инкремент = 1)
Вставляем новую запись - получается переполнение. Такая ситуация.
21 ноя 11, 12:45    [11630947]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
vasiliusis
Member

Откуда:
Сообщений: 58
Для ПК используется автоинкрементное поле
21 ноя 11, 12:48    [11630986]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
vasiliusis,

ALTER TABLE выставить текущее значение 0 (или -1) и инкремент -1.
Или добавляйте столбец, еще один bigint - и переписывайте все процедуры, функции, связи между таблицами редактируйте.
21 ноя 11, 12:58    [11631140]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
В сиквеле все целочисленные типы знаковые. Т.е. cast(0xffffffff as int) даст -1. Ну и, соответственно, при инкременте не будет никакого переполнения.
21 ноя 11, 12:59    [11631148]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

проверить несложно, вроде?
declare @t table (c bigint identity (9223372036854775807, 1))
insert into @t default values
insert into @t default values

но вообще - bigint - это ооооооочень много значений. если брать
весь диапазон, вы его никогда не переполните.

Posted via ActualForum NNTP Server 1.4

21 ноя 11, 13:00    [11631156]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
vasiliusis
Member

Откуда:
Сообщений: 58
Это стало ответом

автор
Msg 8115, Level 16, State 1, Line 1
Arithmetic overflow error converting IDENTITY to data type tinyint.
Arithmetic overflow occurred.
21 ноя 11, 13:07    [11631215]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
vasiliusis
Это стало ответом

автор
Msg 8115, Level 16, State 1, Line 1
Arithmetic overflow error converting IDENTITY to data type tinyint.
Arithmetic overflow occurred.
Это о чём вообще?
21 ноя 11, 13:12    [11631261]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
Это о чём вообще?

Это ЖЖ в действии. )
21 ноя 11, 13:17    [11631311]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
iap
Это о чём вообще?

автор
Msg 8115, Level 16, State 1, Line 1
Arithmetic overflow error converting IDENTITY to data type tinyint.
Arithmetic overflow occurred.
21 ноя 11, 13:18    [11631334]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Зайцев Фёдор
iap
Это о чём вообще?

автор
Msg 8115, Level 16, State 1, Line 1
Arithmetic overflow error converting IDENTITY to data type tinyint.
Arithmetic overflow occurred.
Я поэтому и удивляюсь!
vasiliusis
К примеру, тип ключа bigint
...................................
Вставляем новую запись - получается переполнение
21 ноя 11, 13:21    [11631364]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Полезная ссылка
http://msdn.microsoft.com/ru-ru/library/ms187745%28v=SQL.90%29.aspx
21 ноя 11, 13:26    [11631445]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
vasiliusis
Member

Откуда:
Сообщений: 58
iap
Зайцев Фёдор
пропущено...

пропущено...
Я поэтому и удивляюсь!
vasiliusis
К примеру, тип ключа bigint
...................................
Вставляем новую запись - получается переполнение


Я попробовал то, что сказал daw не для bigint а для tinyint - чево тут непонятного.
С бигинтом будет то же самое
21 ноя 11, 16:42    [11633242]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
invm
В сиквеле все целочисленные типы знаковые. Т.е. cast(0xffffffff as int) даст -1. Ну и, соответственно, при инкременте не будет никакого переполнения.

Не софсем.
daw рулит канкретна.
его скрипт:
(строк обработано: 1)
Сообщение 8115, уровень 16, состояние 1, строка 3
Arithmetic overflow error converting IDENTITY to data type bigint.
Arithmetic overflow occurred.

Но уфигачить bigint... ба-а-а-алин ....
21 ноя 11, 17:05    [11633468]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
SIMPLicity_
invm
В сиквеле все целочисленные типы знаковые. Т.е. cast(0xffffffff as int) даст -1. Ну и, соответственно, при инкременте не будет никакого переполнения.

Не софсем.
daw рулит канкретна.
его скрипт:
(строк обработано: 1)
Сообщение 8115, уровень 16, состояние 1, строка 3
Arithmetic overflow error converting IDENTITY to data type bigint.
Arithmetic overflow occurred.

Но уфигачить bigint... ба-а-а-алин ....
Кстати, есть ещё DEC(38,0)
21 ноя 11, 17:45    [11633842]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
111ываывавыавы
Guest
iap
SIMPLicity_
пропущено...

Не софсем.
daw рулит канкретна.
его скрипт:
пропущено...

Но уфигачить bigint... ба-а-а-алин ....
Кстати, есть ещё DEC(38,0)

да, реально хватает опции идентити, чтобы по кругу ходил, а не оферфловы кидал
21 ноя 11, 20:10    [11634496]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31978
111ываывавыавы
iap
пропущено...
Кстати, есть ещё DEC(38,0)

да, реально хватает опции идентити, чтобы по кругу ходил, а не оферфловы кидал
Зачем это???

Понятно, можно много фич придумать, но у них же должно быть какое то практическое применение. Я ещё понимаю, автоматическое заполнение дырок кто то предложил бы (хотя считаю, что это не нужно). Но идентити по кругу...
21 ноя 11, 20:12    [11634505]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
invm
В сиквеле все целочисленные типы знаковые. Т.е. cast(0xffffffff as int) даст -1. Ну и, соответственно, при инкременте не будет никакого переполнения.
Это неправда.
TINYINT - беззнаковое целое!
21 ноя 11, 20:18    [11634525]     Ответить | Цитировать Сообщить модератору
 Re: Переполнение счетчика первичного ключа  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
iap
invm
В сиквеле все целочисленные типы знаковые. Т.е. cast(0xffffffff as int) даст -1. Ну и, соответственно, при инкременте не будет никакого переполнения.
Это неправда.
TINYINT - беззнаковое целое!
Да, ваша правда.
21 ноя 11, 20:54    [11634638]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить