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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какое будет значение id? 
V
    Опции темы
Rohoss
  Дата 21.4.2010, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

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



Есть таблица
Код

CREATE TABLE Tab (id int NOT NULL IDENTITY, name nchar, parentId int NOT NULL);

В которой хранится древовидная структура. Мне соответственно нужно вставлять туда данные. parentId – это ссылка на родительскую запись. Чтобы сформировать запрос, мне нужно знать, какой при первом инсерте будет присвоен id. Я, конечно могу это узнать, считав последнее значение id. Но, если записи были удалены, id пропускается. Например, если последнее id было равно 3, после чего мы добавили 5 записей и удалили их, то при инсерте, после id = 3, будет идти id = 9. Так как же мне узнать, какой будет следующий id, если записи были удалены?

СУБД SqlCe, но думаю, это не принципиально

Может, ответ на этот вопрос можно было найти в гугле, но я не знаю, по каким кеям его искать…


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Artemon
Дата 21.4.2010, 07:29 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

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



Код

SELECT MAX(id)+1 FROM Tab;





--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Akina
Дата 21.4.2010, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(Rohoss @  21.4.2010,  02:24 Найти цитируемый пост)
Чтобы сформировать запрос, мне нужно знать, какой при первом инсерте будет присвоен id.

В общем случае это невозможно. Следует создать запись и затем запросом получить из неё уже присвоенный ID или в рамках текущей транзакции использовать last_inserted_id() или аналогичную функцию - в SqlCe такая обязана быть, а мне искать её фамилию влом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Deniz
Дата 21.4.2010, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Artemon, не правильно.
Смотри: 
Цитата(Rohoss @  21.4.2010,  03:24 Найти цитируемый пост)
Например, если последнее id было равно 3, после чего мы добавили 5 записей и удалили их, то при инсерте, после id = 3, будет идти id = 9



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
azesmcar
Дата 21.4.2010, 08:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Akina @  21.4.2010,  07:52 Найти цитируемый пост)
last_inserted_id() 

@@IDENTITY

Добавлено через 3 минуты и 22 секунды
Rohoss

IDENT_CURRENT  возвращает номер последней сгенерированного значения для счетчика таблицы.
PM   Вверх
Artemon
Дата 21.4.2010, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

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



Цитата

Artemon, не правильно.
Смотри: Цитата(Rohoss @  21.4.2010,  03:24 )
Например, если последнее id было равно 3, после чего мы добавили 5 записей и удалили их, то при инсерте, после id = 3, будет идти id = 9


...,3,9

Запрос который я показал вернет 10.

Что именно не правильно ?

я думаю ошибка будет только в том случае, если мы удалим ВСЕ записи, тогда такой запрос не сработает корректно.

Это сообщение отредактировал(а) Artemon - 21.4.2010, 08:35


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
azesmcar
Дата 21.4.2010, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Artemon

Допустим данные в таблице на данный момент
1 а
2 б
3 в
4 г

удалили последнюю строку, данные в таблице
1 а
2 б
3 в

твой запрос вернет 3, но на самом деле номер следующей записи будет не 3 а 5.
PM   Вверх
Zloxa
Дата 21.4.2010, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



Цитата(Rohoss @  21.4.2010,  01:24 Найти цитируемый пост)
Чтобы сформировать запрос, мне нужно знать, какой при первом инсерте будет присвоен id.

Почему бы тебе не узнать какой при первом инсерте был присвоен id?(см пост azesmcar)

Потому как "что будет" - ведомо лишь сам знаешь кому. Ведь первого инсерта может и не быть,  он может и откатиться. А еще у нас может быть многопользовательская среда, и одновременно могут проинсертить и пока еще не закоммитить стопиццот сессий. И как мы можем тогда прогнозировать какой айди нам вернет идентити?

Это сообщение отредактировал(а) Zloxa - 21.4.2010, 09:22


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Artemon
Дата 21.4.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

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



azesmcar, ты прав


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Rohoss
Дата 22.4.2010, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

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



К счастью, была возможность изменить структуру таблицы  smile 



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Нестаро
Дата 15.7.2010, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 15.7.2010

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



azesmcar  разве если удалим третью строку следующим значением будет 5 ?
PM MAIL   Вверх
chip_and_dayl
Дата 15.7.2010, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нестаро
Удалили 4-тую строку




--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

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

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

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

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

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


 




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


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

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