Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить ID вставленной записи? / 9 сообщений из 9, страница 1 из 1
25.09.2002, 18:34:19
    #32053092
Kostya.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
Есть таблица с identity ID, т.е. генерится автоматом ;)
Как узнать ID только что вставленной записи?
что бы продолжить с ним (ID) работу?
...
Рейтинг: 0 / 0
25.09.2002, 18:45:01
    #32053096
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
@@IDENTITY
...
Рейтинг: 0 / 0
25.09.2002, 18:52:54
    #32053099
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
Для MS SQL2000 более корректно работает SCOPE_IDENTITY
...
Рейтинг: 0 / 0
26.09.2002, 09:51:16
    #32053161
pima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
@@identity - это, конечно, правильно, НО:
надо иметь в виду, что это значение глобальное для всей базы по всем пользователям и таблицам. Т. е. если вы хотите получить именно своё значение, то надо использовать транзакцию:
Код: plaintext
1.
2.
3.
begin tran
insert into........
..... @Переменная=@@IDENTITY....
commit tran
а то влезет ещё кто-то после вашего инсёрта - и получите его @@identity, а не ваше.
И еще. Инсёрт в триггере на инсёрт приводит к сбою @@identity, т. е. будет возвращено значение для строки, вставленной триггером, а не вами
...
Рейтинг: 0 / 0
26.09.2002, 10:17:19
    #32053166
Shura_M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
2 pima:
насчет "глобального значения по всем пользователям и таблицам" - это Вы загнули! @@IDENTITY работает только внутри сессии, так что транзакция никакая нафиг не нужна. А с триггерами действительно надо быть осторожным, но только тогда, когда они сами вставляют записи в таблицу со столбцом identity. Но как написал Jimmi используйте функцию SCOPE_IDENTITY() и проблем с триггерами не будет.
...
Рейтинг: 0 / 0
26.09.2002, 11:08:52
    #32053194
Kostya.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
Спасибо всем.
Переменная IDENTITY действительно действует только внутри одно сессии.
Как раз то что нужно :)
...
Рейтинг: 0 / 0
26.09.2002, 13:01:07
    #32053259
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
Пользуйте SCOPE_IDENTITY().
Для вас разницы никакой (на 6 символов больше), а надёжно работает в 100% ситуаций.
С @@IDENTITY внутри одно сессии могут быть всякие горбухи особенно при доступе к данным через единый сервер (например IIS).
...
Рейтинг: 0 / 0
26.09.2002, 16:09:23
    #32053374
keystop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
а чем полох IDENT_CURRENT('table_name') ??
...
Рейтинг: 0 / 0
26.09.2002, 16:40:29
    #32053389
Oleg_Martynov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ID вставленной записи?
>а чем полох IDENT_CURRENT('table_name') ??
BOL:
IDENT_CURRENT
Returns the last identity value generated for a specified table in any session and any scope.

Т.е. добавляем запись. В следующую миллисекунду из другой сессии вставляется 100 записей. Смотрим IDENT_CURRENT('table_name') и получаем ID 101 записи, а не нашей.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить ID вставленной записи? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]