Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> свойство IDENTITY, значения проскакивают 
:(
    Опции темы
Golden Hands
Дата 11.7.2005, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 1
Всего: 83



Есть таблица, в ней поле id типа smallint, primary key, для этого поля установлено свойство identity с начальным значением равным 1, инкремент равен 1. То есть при вставке новых записей в таблицу значения этого поля должны увеличиваться на 1. Так и происходит.
Несколько раз замечал такую штуку: при обновлении каких-то записей, и последующей вставке новых значений в таблицу, значение поля id было не на 1, а на 2 или 3 больше предыдущего.
Может быть кто-нибудь сталкивался с этим? Отчего так происходит?


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Петрович
Дата 12.7.2005, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 1
Всего: 55



Вероятно это связано с откатом транзакции вставившей запись в эту таблицу.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
AntonSaburov
Дата 12.7.2005, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



В принципе Петрович уже все сказал. Я бы еще добавил, что не надо обращать на это внимания. И строить приложение так, чтобы не думать о таких штуках.
PM MAIL WWW ICQ   Вверх
Golden Hands
Дата 13.7.2005, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 1
Всего: 83



AntonSaburov, не обращать внимания на Identity? Т.е. не юзать его, хочешь сказать?


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Петрович
Дата 13.7.2005, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 1
Всего: 55



Цитата(Golden @ 13.7.2005, 01:04)
AntonSaburov, не обращать внимания на Identity? Т.е. не юзать его, хочешь сказать?

Нет. Имеется ввиду не обращать внимание на "дыры" в нумерации.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
AntonSaburov
Дата 13.7.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Именно это и имел в виду.
PM MAIL WWW ICQ   Вверх
Golden Hands
Дата 14.7.2005, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 1
Всего: 83



Ну это понятно, кроме ситуаций, когда последовательность важна.


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
kobra
Дата 14.7.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Цитата(Golden @ 14.7.2005, 01:23)
Ну это понятно, кроме ситуаций, когда последовательность важна.
тогда откажис от автоинкремента. правда ето порадит другие проблемы.
может пригадится для размышлении

правда, мне кажется можно схитрить.
создать таблицу (можно даже с автоинкрементным ID) и загнать туда NULL-еи столько, сколько может появится записеи в таблице. естественно поле ID будет заполнено подряд. а далше когда нужно будет чтото добавить, просто вставиш ету запис вместо первого NULL.
ну и изврашение. прошу не пинать.

PM MAIL   Вверх
Vit
Дата 14.7.2005, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Тогда делается не автоинкремент, а обычное поле, а в Insert запрос ставится что-то типа:


Код

Declare @i int

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Begin Tran


Select @i=Max(MyFakeAutoincrement)+1 From MyTable

Insert into MyTable(MyFakeAutoincrement, другие поля)
Values (@i, другие поля)

Commit tran
SET TRANSACTION ISOLATION LEVEL READ COMMITTED


Но! При удалении записи из средины прийдётся перенумеровывть весь столбец! А это на больших таблицах может занять изрядно времени, ещё и с учётом того, что при такой перенумерации необходимо намертво блокировать таблицу от других транзакций и по записи, и скорее всего и по чтению.

Вообще-то нумерация строк и её привязка в 99% случаев свидетельствует о том что человек пришёл в мир баз данных недавно, и привык манипулировать массивами, и теперь старается перенести известную ему идеологию на базы данных... На самом деле сквозная нумерация нужна чрезвычайно редко, за 7 лет работы я ещё не встречал ее необходимости


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Golden Hands
Дата 16.7.2005, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 1
Всего: 83



Vit, как раз не недавно. А спрашивал затем, чтобы не осталось неразрешенных вопросов. Про массивы и не вспоминал. smile

Это сообщение отредактировал(а) Golden Hands - 16.7.2005, 01:52


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Vit
Дата 16.7.2005, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Цитата(Golden @ 15.7.2005, 16:50)
Vit, как раз не недавно. А спрашивал затем, чтобы не осталось неразрешенных вопросов.


smile Бывает... Просто случай типичный, я модерю базы в Дельфи, и обычный вопрос, человек спрашивает как мне обратится к столбцу номер... и строке номер... Хотя, спорить не буду - ситуации всякие бывают...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.