Консультация № 67859
20.12.2006, 17:13
0.00 руб.
0 2 2
У меня:
Microsoft SQL Enterprise Manager Version: 8.0
Есть Таблица Users .
В ней есть ID, FName, LName и так далее.
Иногда у меня удаляются записи, то есть идет ID=4, а потом ID=6.
Как можно с помощью SQL запроса , "обновить" таблицу, что бы числа шли по порядку?
Либо средствами Enterprise Manager?
(Поиск в нете делал и все свои книжки просматривал.)
Спасибо заранее.

Обсуждение

Неизвестный
20.12.2006, 17:25
общий
это ответ
Здравствуйте, Logicpc!

1) Это бесмысслено, так как в классической теории БД записи располагаются в таблице ПРОИЗВОЛЬНО. Т.е. любая работа с таблицами не предполагает какого-либо порядка записей. Правда это не мешает отсортировать результат запроса в нужном порядке, но именно результат.
2) Если зачем-то нужно упаковать значения полей, чтобы значения поля шли по порядку, без дырок, то можно написать хранимую процедуру, которая в цикле просмотрит всю таблицу и изменит значения этих полей в нужном порядке.
Неизвестный
21.12.2006, 09:32
общий
это ответ
Здравствуйте, Logicpc!
Это происходит из-за того, что поле ID ключевое с автоинкрементом.
Если есть связи с другими таблицами, то это поле лучше не трогать, даже больше -
в этом случае категорически запрещено его менять, иначе нарушится целостность данных во всей базе.

Если таких связей нет, и действительно очень важно, чтобы не было дыр,то можно сделать поиграв со структурой таблицы Enterprice Manager.
- самым первым полем заводите новое поле ID1
- c поля ID снимаете автоинкремент и ключ
- на поле ID1 ставите автоинкремент и ключ
- сохраняете изменения

- затем необходимо удалить поле ID (или переименовать в ID_old)
- переименовать Id1 в ID
подобного эффекта можно также достичь, скопировав данные (кроме ID) в таблицу аналогичной структуры, а затем переименовав таблицу.

попробуйте.
как видите, в принципе это выполнимо, если сильно надо. Просто обычно этого никто не делает, внутренние идентификаторы системы обычно нигде не выводятся и не отображаются, поэтому какое у них значение абсолютно все равно.
Форма ответа