Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Добрый день
3 апр 18, 13:38    [21308161]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Игорь_UUS,

вам хелп запрещено читать?
3 апр 18, 13:40    [21308165]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Игорь_UUS,

а вообще, что такое автоинкрементное поле, а то варианты :)
3 апр 18, 13:42    [21308169]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Игорь_UUS,

нет
3 апр 18, 13:44    [21308179]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
Игорь_UUS,

нет
а если SEQUENCE
3 апр 18, 13:45    [21308187]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
TaPaK,

сиквенс, всё таки, вряд ли можно назвать автоинкрементом
это по сути дефолт на поле (вызов функции)
3 апр 18, 13:55    [21308221]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Дедушка
TaPaK,

сиквенс, всё таки, вряд ли можно назвать автоинкрементом
это по сути дефолт на поле (вызов функции)

ну "Автоинкрементоне поле"... процессорами то тоже всё подряд называют :) ну и identity можносбросить
3 апр 18, 14:02    [21308262]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
задача следующая... нужно поле 2 байт (от 1 до 64535), каждая новая запись должна иметь следующий номер по порядку. Когда доходит до 64535 идёт сброс на 0.

Сложность в том, что с этой таблицей работает сервис с несколькими потоками, он должен брать запись с гарантированным уникальным ID 2 байт. Если поле identity то это гарантирует на уровне БД, что поле будет иметь уникальный идентификатор. Но вопрос, как правильно его сбросить
3 апр 18, 14:23    [21308401]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Игорь_UUS
Если поле identity то это гарантирует на уровне БД, что поле будет иметь уникальный идентификатор
Нет
3 апр 18, 14:24    [21308410]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Игорь_UUS,

SEQUENCE ваш вариант
3 апр 18, 14:24    [21308413]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
iap
Игорь_UUS
Если поле identity то это гарантирует на уровне БД, что поле будет иметь уникальный идентификатор
Нет
Уникальность гарантирует только уникальный индекс.

Можно сделать поле BIGINT IDENTITY (в нашей жизни вряд ли переполнится)
и вычисляемое поле на базе этого, которое будет вычислять IdentityField%64536.
Вот это поле и будет удовлетворять вашим требованиям.
3 апр 18, 14:28    [21308438]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Игорь_UUS,

стоит отдельно
автор
каждая новая запись должна иметь следующий номер по порядку.

этого "просто так" не будет
3 апр 18, 14:37    [21308490]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
iap
iap
пропущено...
Нет
Уникальность гарантирует только уникальный индекс.

Можно сделать поле BIGINT IDENTITY (в нашей жизни вряд ли переполнится)
и вычисляемое поле на базе этого, которое будет вычислять IdentityField%64536.
Вот это поле и будет удовлетворять вашим требованиям.
Поправка:
IdentityField BIGINT IDENTITY UNIQUE,
Field AS CAST((IdentityField-1)%64535+1 AS SMALLINT)
3 апр 18, 14:38    [21308496]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
TaPaK
Игорь_UUS,

стоит отдельно
автор
каждая новая запись должна иметь следующий номер по порядку.

этого "просто так" не будет
При удалении будут появляться "дырки"
3 апр 18, 14:40    [21308507]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
TaPaK
Игорь_UUS,

стоит отдельно
пропущено...

этого "просто так" не будет
При удалении будут появляться "дырки"

ну не только
3 апр 18, 14:43    [21308531]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
iap
iap
пропущено...
Уникальность гарантирует только уникальный индекс.

Можно сделать поле BIGINT IDENTITY (в нашей жизни вряд ли переполнится)
и вычисляемое поле на базе этого, которое будет вычислять IdentityField%64536.
Вот это поле и будет удовлетворять вашим требованиям.
Поправка:
IdentityField BIGINT IDENTITY UNIQUE,
Field AS CAST((IdentityField-1)%64535+1 AS SMALLINT)


Вроде идея понятно, но не понятно как оно может работать((

с SEQUENCE никогда не работал... подскажите с чего начать, получается нужно создать SEQUENCE, потом его нужно как то применять при создании новой записи в таблице... это как выглядит на tsql (очень буду признателен)
3 апр 18, 15:19    [21308743]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
https://habrahabr.ru/post/123446/
3 апр 18, 15:22    [21308758]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Konst_One
https://habrahabr.ru/post/123446/


SEQUENCE получается появился в версии MSSQL 2012? в 2008 получается его нет?
3 апр 18, 15:25    [21308773]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
вроде бы с 2008 r2 sp1

и вот это ещё почитайте:
https://msdn.microsoft.com/ru-ru/library/ff878370(v=sql.120).aspx
3 апр 18, 15:28    [21308788]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Игорь_UUS
Konst_One
https://habrahabr.ru/post/123446/


SEQUENCE получается появился в версии MSSQL 2012? в 2008 получается его нет?
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-sequence-transact-sql
3 апр 18, 15:31    [21308801]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Konst_One
вроде бы с 2008 r2 sp1

и вот это ещё почитайте:
https://msdn.microsoft.com/ru-ru/library/ff878370(v=sql.120).aspx

вроде бы в вашей же ссылке
Область применения: SQL Server (начиная с SQL Server 2012 до текущей версии)
3 апр 18, 15:31    [21308802]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
проверить не могу , но проскакивало вроде бы, что в 2008 r2 уже появилось
3 апр 18, 15:32    [21308809]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Konst_One
проверить не могу , но проскакивало вроде бы, что в 2008 r2 уже появилось

проскочило сразу в 2012
3 апр 18, 15:33    [21308817]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
хотя нет, только с 2012
3 апр 18, 15:34    [21308818]     Ответить | Цитировать Сообщить модератору
 Re: Автоинкрементное поле, когда доходит до верхнего предела, начинает отсчёт заново?  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Господа... есть ещё идея, есть автоинкремент по полю INT, размер 4 байта. В моём случае уникальность будет гарантировать младшие 2 байта.

Вопрос, можно ли средствами TSQL из INT 4 байт вычленить 2 младших байта и получить из этих 2 байт число?
3 апр 18, 15:59    [21308956]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить