Использование @@ identity в хранимой процедуре хорошо / плохо? - PullRequest
0 голосов
/ 11 января 2011

У меня есть хранимая процедура, которая вставляет запись со столбцом Identity. Сразу после вставки я использую @@ identity для вставки записей в дочернюю таблицу.

Есть ли какие-либо последствия для этого?

Ответы [ 4 ]

4 голосов
/ 11 января 2011

Обычно это не так хорошо, как SCOPE_IDENTITY, если ваша версия предлагает это, потому что @@ Identity не ограничен текущей областью действия. Он извлечет самую последнюю идентификационную информацию, даже если она была из другого sp в другой таблице.

Пинал Дэйв имеет прямое объяснение предложений IDENTITY здесь: http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

3 голосов
/ 11 января 2011

SCOPE_IDENTITY следует использовать.Если INSERT должен запустить триггер, который также выполняет вставку идентификатора, вы получите неправильное значение (т. Е. Значение, сгенерированное вставкой триггера) из @@ identity.

1 голос
/ 11 января 2011

@@ IDENTITY - последнее значение идентификатора, вставленное для ЛЮБОЙ записи.Если вы получаете высокий параллелизм пользователя, вы получите неправильное значение идентификатора, т. Е. Получите значение, которое только что вставил другой запрос.

Для последнего значения идентификатора, вставленного в текущую область, используйте SCOPE_IDENTITY .

0 голосов
/ 11 января 2011

Просто добавлю к этому мою любимую артиллерию, если не для чего, то для ее названия " Кризис идентичности "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...