Подтвердить что ты не робот

Причина использования идентификатора @@, а не scope_identity

В базе данных SQL Server 2005 один из наших удаленных разработчиков только что зарегистрировался при изменении хранимой процедуры, которая изменила "select scope_identity" на "select @@identity". Знаете ли вы какие-либо причины, по которым вы используете идентификатор @@для scope_identity?

4b9b3361

Ответ 1

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

Ответ 2

Вот ссылка, которая может помочь различать их

выглядит следующим образом:

  • ИДЕНТИФИКАЦИЯ - последний идентификатор соединения
  • SCOPE_IDENTITY - последний идентификатор, который вы явно создали (исключая триггеры)
  • IDENT_CURRENT (имя_таблицы). Последняя идентификация в таблице, независимо от области действия или подключения.

Ответ 3

Я не могу придумать никого, если бы не был триггер, а затем вставил строку (или что-то вроде этого), и мне действительно очень хотелось, чтобы идентификатор этой строки, вставленной триггером, а не строка, которую я физически изменил.

Другими словами, нет, не совсем.

  • ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: не эксперт по T-SQL:)

Ответ 4

Может быть, вы должны попросить у разработчика их обоснование для внесения изменений.

Ответ 5

Если вы хотите использовать триггер, вы можете получить добавленный триггер, это единственная причина, по которой я могу придумать. Даже тогда это опасно, поскольку можно добавить еще один триггер, и вы снова получите неправильную идентификацию. Я подозреваю, что разработчик не знает, что он делает. Но, честно говоря, лучше всего спросить его, почему он внес изменения. Вы можете изменить его, но разработчик должен знать, что не делать этого снова, если ему не нужен идентификатор триггера, поскольку вы не можете его поймать в следующий раз.