Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > MS SQL Server > Втавить запись и безошибочно получить её ИД |
Автор: Иван Человеков 16.5.2006, 07:05 | ||
Подскажите пожалуйста, как узнать ИД записи, которую только что вставил. Вот как я это делаю:
Дело в том, что в это время другой пользователь может вставить ещё одну запись, а при поиске максимальной записи, оба будут ссылаться на одну и ту же запись. |
Автор: Иван Человеков 16.5.2006, 12:07 | ||
Спасибо разобрался:
|
Автор: ALKS 16.5.2006, 12:12 | ||
Ну если твой столбец c ID в таблице описан как IDENTITY, то правильнее так:
Но ты должен понимать что возвращаеться ID последнего перед вызовом @@IDENTITY запроса: "Returns the last-inserted identity value." |
Автор: Balu 16.5.2006, 15:44 | ||||
@@IDENTITY глобално на всю базу для текущей сессия Scope_Identity() в рамках текущей хранимки (тригера) Для примера попробуйте использовать @@IDENTITY в случае когда на INSERT установлен тригер с операцией добавления в другую таблицу с автоинкрементным полем. Вы будете неприятно удивлены, так как получите значение из второй таблички. |
Автор: ALKS 16.5.2006, 15:55 |
Balu, дя я знаю это. но что у нас про тригеры никто не говорил изначально ![]() |
Автор: Balu 17.5.2006, 11:02 | ||
Это хорошо, что ты знаешь ![]() Но у меня была ситуация, когда я вставлял логирование изменений спустя полгода, как был разработан модуль. Логирование сделал через тригер, в бизнес логиу хранимок не лазил. И каково было мое удивление, когда вся логика работы полетела к чертям собачим. С тех пор не люблю я это идентити :-( и не советую другим юзать. |
Автор: ALKS 17.5.2006, 12:01 |
SCOPE_IDENTITY() и IDENT_CURRENT() появились только в MS SQL 2000. а раньше выбора особого не было ![]() И появились они именно из-за описанной тобой проблемм с триггерами что прямо было написано в "What's New". Но избегание использования тригееров есть очень хороший постулат, так что наши системы совершенно спокойно жили до этих новшеств и живут без них и дальше. ![]() |
Автор: Balu 17.5.2006, 12:57 | ||
Очень напоминает анекдот про сына программиста и солнце: "... раз работает, то ничего не трогай" |
Автор: javas 25.5.2006, 01:35 |
Как удалить, не знаю. |