Если вы понимаете разницу между областью действия и сессией, то эти методы будут очень легко понять.
Очень хорошая запись в блоге Адама Андерсона описывает эту разницу:
Сеанс означает текущее соединение, которое выполняет команду.
Область действия означает непосредственный контекст команды. Каждый вызов хранимой процедуры выполняется в своей собственной области, а вложенные вызовы выполняются во вложенной области в пределах области вызывающей процедуры. Аналогично, команда SQL, выполняемая из приложения или SSMS, выполняется в своей собственной области, и если эта команда запускает какие-либо триггеры, каждый триггер выполняется в своей собственной вложенной области.
Таким образом, различия между тремя методами поиска идентичности заключаются в следующем:
@@identity
возвращает последнее значение идентификатора, сгенерированное в этом сеансе, но любую область.
scope_identity()
возвращает последнее значение идентичности, сгенерированное в этом сеансе, и эту область.
ident_current()
возвращает последнее значение идентификатора, сгенерированное для конкретной таблицы в любом сеансе и любой области видимости.