![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
INSERT в MSSQL [D7, MSSQL]
ST © (2005-04-28 12:23:00)Господа, подскажите, можно ли при выполнении INSERT на MSSQL 2000 вытащить полученный автоинкрементом новый индекс записи в одном запросе.
Polevi (2005-04-29 10:56:00) [41]>ANB © (29.04.05 10:34) [28]
достал ты уже своим невежеством, изучи сервер сначала а потом советы давай
начальник ему плохой посоветовал.. дадад
начни со своего вопроса в [11]
ANB (2005-04-29 10:34:00) [42]
> Johnmen © (29.04.05 09:51) [27]
- это ты для MS SQL выдрал ? Интересно, зачем им триггера AFTER, они же с наборами данных работают deleted и inserted . . . Да ладно, не принципиально. Получается что BEFORE таки есть. Один хрен, для автоинкрементального поля ID в триггере не подменишь.
Johnmen (2005-04-29 09:51:00) [43]>ANB © (29.04.05 09:31) [26]
CREATE TRIGGER trigger_name
...
{{{ FOR | AFTER| INSTEAD OF} { [ INSERT] [ , ] [ UPDATE ] }
...
ANB (2005-04-29 09:31:00) [44]
> Fay © (28.04.05 18:04) [25]
> ANB © (28.04.05 17:15) [18]
> AFTER
- то есть срабатывает после инсерта ? Быть такого не может. А как же тогда подменять поля при необходимости ? Прямо табличку апдейтить ? И опять на триггер нарываться ? У тебя стоит MS SQL ? Если да, то слазий в хелп, плз, а то у меня его сейчас нет.
Fay (2005-04-28 18:04:00) [45]ANB © (28.04.05 17:15) [18]
AFTER
ANB (2005-04-28 17:49:00) [46]
> Johnmen © (28.04.05 17:43) [23]
- почему, я лично предпочитаю юзать сиквенсы или GUID. Но по данному топику другого ответа действительно нет.
Johnmen (2005-04-28 17:43:00) [47]Мои три копейки - так и только так : ANB © (28.04.05 13:01) [5]
Обсуждение альтернативных "рукоёмких" способов неуместно, ИМХО.
ANB (2005-04-28 17:42:00) [48]
> Max Zyuzin © (28.04.05 17:27) [21]
- топик читал ? Поле уже автоинкрементальное.
> другого способа я так и не нашел...
- select @@identity - это и есть нормальный способ. Мне его ребята в РНИВЦ в Нижнем подсказали. Я до этого сам максом последний ID доставал.
И не всегда ты имеешь право перепроектировать БД. Плюс, тебе придется либо генерить ID уникальный по всей базе (что не плохо, но на каждой операции у тебя все клиенты будут ждать разблокировки служебной таблицы), либо заводить эту таблицу для каждой таблицы с данными. Тогда проще max юзать и саму таблицу с данными блокировать.
Max Zyuzin (2005-04-28 17:27:00) [49]>ANB © (28.04.05 17:22) [20]
ID в таблицы типа BigInt и усе... никаких Identity. Все "автоинкрементирование" виртуальное... на уровне приложения осуществляется, я понимаю что это ни есть гуд, только вот другого способа я так и не нашел...
ANB (2005-04-28 17:22:00) [50]
> Max Zyuzin © (28.04.05 17:19) [19]
- ты не понял вопроса, как ты засовываешь свой сгенеренный ID в таблицу ? Если у нее ID автоинкрементальный ?
Max Zyuzin (2005-04-28 17:19:00) [51]>ANB © (28.04.05 17:09) [16]
Я про триггеры и не говорил, я вообще использую такую конструкцию только для добавления в master-detail на "лету", что бы все добавлялось в одной быстрой транзакции, я сначала получаю ID master-а вышеуказаным способом, потом в одной транзакции все толкаю сразу в обе таблицы, вот.
ANB (2005-04-28 17:15:00) [52]
> Fay © (28.04.05 17:10) [17]
триггера на таблицы в MS SQL в принципе BEFORE и есть . . . А разве не так ?
Fay (2005-04-28 17:10:00) [53]Max Zyuzin © (28.04.05 17:03) [15]
Где это Вы видели триггеры BEFORE в MSSQL?!
ANB (2005-04-28 17:09:00) [54]
> Max Zyuzin © (28.04.05 17:03) [15]
- см.
> ANB © (28.04.05 16:46) [13]
Max Zyuzin (2005-04-28 17:03:00) [55]>ANB © (28.04.05 16:52) [14]
Я вот согласен с msguns © (28.04.05 13:06) [7] тоже порылся по форумам, почитал макулатуру, и решил что это и есть самый оптимальный способ.
ANB (2005-04-28 16:52:00) [56]
> msguns © (28.04.05 16:28) [12]
- слушай, а чего это мы с тобой бодаемся, если автор топика давно свалил ?
ANB (2005-04-28 16:46:00) [57]
> Я это предлагал ?
а как ты проинсертишь запись с этим сгенеренным ID ? Инсерт в студию !
msguns (2005-04-28 16:28:00) [58]>ANB © (28.04.05 16:07) [11]
>- твой способ набъет мозоли юзеру.
Каким образом, если не секрет ?
>Фактически, ты предлагаешь не использовать автоинкрементальные поля.
Я это предлагал ?
ANB (2005-04-28 16:07:00) [59]
> Не взирая на погоду и мозоли ;)
- твой способ набъет мозоли юзеру. Зачем изобретать велосипед, если он уже изобретен ? Фактически, ты предлагаешь не использовать автоинкрементальные поля. А если они уже есть в базе и убрать ты их не имеешь права ?
Хе, видел давеча хохму : таблица в MS SQL с единственным полем - автоинкрементальным ID. Интересно, как на нее инсерт написать ?
msguns (2005-04-28 15:56:00) [60]>ANB © (28.04.05 15:40) [9]
>- читай топик ("до" не надо, нужен аналог ретурнинг Oracle).
С этим согласен.
>- не надо его обманывать. В нем есть штатные функции для этих целей. А это изгал.
С этим нет. Не надо заставлять всех ходить в таких же тапочках, как у тебя. Не взирая на погоду и мозоли ;)