-
> более глупого поста чем Johnmen © (04.09.08 13:34) [32]
> в этой ветке небыло.
Вообще-то он как бы по делу спросил...
-
Жаль, что нельзя вставить в цитату все посты в этой ветке...
Куда катится мир? До чего довел планету этот фигляр Пэжэ?!!
> stas © (04.09.08 16:40) [39]
>
> Johnmen © (04.09.08 16:34) [38]
> более глупого поста чем Johnmen © (04.09.08 13:34) [32]
> в этой ветке небыло.
БЫЛО!!! Вот это:
> stas © (04.09.08 12:22) [5]
>
> DVM © (04.09.08 12:03)
> наверное такой:
> после вставки
> select max(ID) from mytable
Хотя они друг друга стоят.
-
> stas © (04.09.08 16:40) [39]
> Johnmen © (04.09.08 16:34) [38]более глупого поста чем
> Johnmen © (04.09.08 13:34) [32]в этой ветке небыло.
Это ты так думаешь на основании своих убогих знаний и нулевого опыта.
> Курдль (04.09.08 16:52) [41]
> Хотя они друг друга стоят.
Не стОит право ровнять моё предложение [32] с [5].
А то могу подумать грустное про тебя...:)
-
пошли разборки, пора закрываться
-
> Хотя они друг друга стоят.
А в чём проблема генерации ID на клиенте? Искренне не понимаю...
-
Какой "клиент" может дать вам гарантированно уникальный идентификатор (не GUID)?
Какой запрос гарантированно защитит вас от многопользовательской коллизии?
Зачем СУБД городили все эти генераторы, последовательности, автоинкременты и т.п.?
-
> Какой "клиент" может дать вам гарантированно уникальный
> идентификатор (не GUID)?
А этого и не требуется :)
> Какой запрос гарантированно защитит вас от многопользовательской коллизии?
Не запрос. А возвращаемая сервером ошибка.
> Зачем СУБД городили все эти генераторы, последовательности,
> автоинкременты и т.п.?
Перечитай постановку вопроса автора ветки.
ЗЫ
Начинаешь огорчать...:(
-
> Какой "клиент" может дать вам гарантированно уникальный
> идентификатор (не GUID)?
Кстати, и GUID не гарантирует...
-
> Johnmen © (04.09.08 17:12) [46]
> Перечитай постановку вопроса автора ветки.
Я именно поэтому привел цитату из Кин-дза-дзы.
Ну, автор решил осчастливить мир каким-нибудь компонентом, который "может все".
А вы-то что? Почему в первом же посте не сказали, что ЭТО НЕВОЗМОЖНО.
Почитайте спец. литературу по СУБД и найдите там "альтернативные" варианты получения уникальных идентификаторов.
-
> Почему в первом же посте не сказали, что ЭТО НЕВОЗМОЖНО
да ну? я ж сказал - бессмысленно
-
1. Гарантирует уникальность автоинкримент
2. определить последнию вставленную запись универсальным методом можно
select max(ID) from mytable в рамках одной транзакции
и без извращений описаных в Ega23 © (04.09.08 13:31) [31]
если так рассуждать можно любой метод завалить
3. Давать глупые советы и доказывать что они умные еще глупее тем более если у тебя в анкете буква M
4. чем глупее [5] чем [39] обоснуй пожалуйста
5. Попробуйте доказать обратное 1 и 2.
-
> 1. Гарантирует уникальность автоинкримент
1. Не гарантирует (для MSSQL способы "ломания" я уже приводил. Есть и другие).
2. Есть далеко не везде.
3. select max(ID) Если уж взялся такое писать, то пиши как положено:
select IsNull(max(ID) + 1, 1)
-
> определить последнию вставленную запись универсальным методом
> можноselect max(ID) from mytable в рамках одной транзакции
только в однопользовательском случае, не бывает междупользовательских транзакций
в остальных случаях последняя вставленная может быть совсем не твоя
мало того, если инкремент делать -1, то и не max вовсе нужно использовать
-
Ega23 © (04.09.08 17:43) [51]
зачем +1 это же не будет ID последней вставленной записи.
-
> зачем +1 это же не будет ID последней вставленной записи.
Зачем мне ID "последней вставленной записи"?
И что будет, если таблица пустая?
-
> Зачем мне ID "последней вставленной записи"?
Олег, ты заголовок темы забыл :)
а зачем - так хотя бы для того, чтобы использовать его в других таблицах в рамках транзакции
> И что будет, если таблица пустая?
вряд ли она будет пустая, если запись только что добавили (хотя варианты есть, конечно)
-
> Олег, ты заголовок темы забыл :)
> а зачем - так хотя бы для того, чтобы использовать его в
> других таблицах в рамках транзакции
Declare @ID int;
Select @ID=IsNull(Max(ID) + 1, 1) from Table;
Insert into Table (ID, ....) Values (@ID, ...)
Только так, по-другому низя....
-
Ega23 © (04.09.08 18:39)
[56]я предлагал так:
Declare @ID int;
Insert into Table (....) Values ( ...)
Select @ID=select Max(ID) from Table;
-
Правильный$Вася (04.09.08 17:43) [52]
> begin tran
> Declare @ID int
> Insert into Table (....) Values ( ...)
> Select @ID=select Max(ID) from Table;
> commit tran
Это пройдет в рамках одной транзакции, что исключает между инструкциями выполнение другой транзакции
-
> stas © (04.09.08 21:58) [58]
дудки
другая транзакция (от другого подключения) может запросто закончиться где-нить между Insert и select, в результате ты увидишь чужой id