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

голоса
11

На базе данных SQL Server 2005, один из наших удаленных разработчиков только что проверил в изменении хранимой процедуры, которые изменили на «выберите SCOPE_IDENTITY», чтобы «выбрать @@ идентичности». Знаете ли вы какие-либо причины, почему вы использовали бы @@ тождественность над scope_identity?

Задан 09/12/2008 в 18:11
источник пользователем
На других языках...                            


5 ответов

голоса
18

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

Ответил 09/12/2008 в 18:17
источник пользователем

голоса
12

Вот ссылка , которая может помочь дифференцировать их

выглядит как:

  • IDENTITY - последнее тождество на связи
  • SCOPE_IDENTITY - последнее тождество вы явно созданные ( за исключением триггеров)
  • IDENT_CURRENT ( «имя_таблицы») - Последняя Идентичность в таблице , независимо от объема или соединения.
Ответил 09/12/2008 в 18:20
источник пользователем

голоса
2

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

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

  • ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Не эксперт T-SQL :)
Ответил 09/12/2008 в 18:16
источник пользователем

голоса
1

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

Ответил 09/12/2008 в 21:48
источник пользователем

голоса
0

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

Ответил 09/12/2008 в 21:44
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more